Dtに1行目を追加したい

こんにちは
UiPath Studio 2024.10.4Community editionのユーザです。

dtに1行目を追加したいです。

Invoke methodアクティビティでInsertATメソッドを使う方法は知っていますが、Community Editionのバグでこの方法は使えないため、他の方法があればご教示ください。

Hi @gorby

1. Build DataTable (New Table)
Output: newDT
Action: Create a new DataTable (newDT) with the same columns as the original DataTable (dt).
2. Add Data Row
ArrayRow: { "Value1", "Value2", "Value3"} (your values for the first row)
DataTable: newDT
3. Merge Data Table
Source: dt (original DataTable)
Destination: newDT

Or

By using Invoke Code activity

Regards,

おそらく、質問の内容としては以下のような状況を想定しています。

追加元のデータテーブル(dt_Src)と追加先のデータテーブル(dt_Dst)の2つがあります。
追加元の特定のデータ行(dr_Src)を、追加先のデータテーブル(dt_Dst)の0行目(最初の行)に挿入したいという内容だと思われます。

InvokeCodeを使用して、dt_SrcDataRowdt_Dstの0行目(最初の行)に追加する方法のサンプルコードを以下に示します。
dt_InvokeCodeInsertAt.xaml (13.4 KB)

InvokeCodeの中身

’ dt_Dstに新しいDataRowを作成
Dim dr_New As DataRow = dt_Dst.NewRow()

’ ItemArrayでdr_Srcの値をコピー
dr_New.ItemArray = dr_Src.ItemArray

’ コピーした行をdt_Dstの最初の位置に挿入
dt_Dst.Rows.InsertAt(dr_New, 0)

引数は以下のとおりです。

どうぞ、よろしくお願いします。

新規作成したDataRowを別のdtの1行目に挿入する構文はこう書くのですね。。
Invoke Codeアクティビティを使わなくても代入文で行けそうです。ありがとうございました。

DataRowCollection.InsertAtメソッドは戻り値がありませんので、代入アクティビティでは使えないと思います。最初のPOSTに書かれています通り通常はInvoke Methodを使いますが、これが使えないときのワークアラウンドは、既に出ていますがInvokeCodeを使う例

あるいは、一旦DataRowにばらしてから、Concatメソッド等で組み立てなおす方法が考えられます。

dt = dt.AsEnumerable.Take(pos).Concat({nrow}).Concat(dt.AsEnumerable.TakeLast(dt.RowCount-pos)).CopyToDataTable()

上記の例は3番目に挿入しています。

サンプル
Sample20240916-3a.zip (3.3 KB)

1 Like

確認です。
dr_NewRow=dt.NewRow
でdr_NewRowを新規作成して

dt.Rows.InsertAt(dr_NewRow, 0)
でdr_NewRowをdtの1番目に挿入することはできませんか?

dt.Rows.InsertAt(dr_NewRow, 0)
でdr_NewRowをdtの1番目に挿入することはできませんか?

です。

InvokeMethodやInvokeCodeを使えば可能です。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.