So-net無料ブログ作成
検索選択

DataTable間でDataRowをコピーする [.NET]

データテーブルAの特定の行を同じ構造を持ったデータテーブルBにコピーする方法について説明します。

最初、何も考えずにこうかなと考えて作ったら失敗しました。
【失敗例】
Private Sub CopyDataRow()
'データテーブルAの作成
Dim oTblA As DataTable = New DataTable
oTblA.Columns.Add("shain_cd")
oTblA.Columns.Add("shain_nm")
oTblA.Columns.Add("remarks")
'5行作成
For nRow As Integer = 0 To 4
Dim oRow As DataRow = oTblA.NewRow
oRow("shain_cd") = 1
oRow("shain_nm") = "社員" & nRow
oRow("remarks") = nRow
oTblA.Rows.Add(oRow)
Next

'データテーブルAからデータテーブルBを作成
Dim oTblB As DataTable = oTblA.Clone

'データテーブルAの先頭行を取得し、データテーブルBに追加
Dim oRowCopy As DataRow = oTblA.Rows(0)
oTblB.Rows.Add(oRowCopy) End Sub

とすると、oTblB.Rows.Add(oRowCopy)の部分で"この行は既に別のテーブルに属しています。"というエラーメッセージが出力されました。
oRowCopyはoTblAに属しているから移動できないとのことでした。
この場合はImportRowを使用します。

oTblB.ImportRow(oRowCopy)

とすることで解決しました。

結果(イミディエイト ウインドウ
? otblB.Rows(0)("shain_cd")
"1" {String}
String: "1"
? otblB.Rows(0)("shain_nm")
"社員0" {String}
String: "社員0"

以上です。[グッド(上向き矢印)]





データテーブルのソート [.NET]

久しぶりに書きます。

取得したデータテーブル内のレコードをソートする関数です。

Public Shared Function SortTable(ByVal oTbl As DataTable, ByVal sSortCol As String) As DataTable
Dim oView As New DataView(oTbl)
oView.Sort = sSortCol '列を降順に並べ替える
Return oView.ToTable '並び替え後のレコードを返す
End Function

以上です。[わーい(嬉しい顔)]





C# GreapCity Spread コピペについて [.NET]

グレップシティーのスプレッドではまりました。[がく~(落胆した顔)][もうやだ~(悲しい顔)][ふらふら]
[Spread1]のデータを[Ctrl + C]でクリップボードにコピーし、[Spread2]に[Ctrl + V]でペーストしたかったのですが、うまく動作しませんでした。何も設定せずにできるはずなのですが…

各Spreadコントロールで自分が設定しているプロパティを初期に戻してみたらコピペができました。
どうやら
Spread2.SpreadMode = ExFpSpread.eSpreadMode.Display;
Spread2.ActiveSheet.OperationMode = FarPoint.Win.Spread.OperationMode.ExtendedSelect;
が邪魔をしていたようです。
貼り付け側のスプレッドのSpreadMode がDisplay、OperationModeがExtendedSelectではペーストできませんでした。
複数行の任意選択ができる、読み取り専用スプレッドにCtrl + V でペーストしたかったので、以下のようにしました。

DisplayをInputに変更し、デザイナで各列のReadOnlyをTrueにしました。
OperationMode.ExtendedSelectにするとペーストできないようで(おそらく)
スプレッドのKeyDownイベントでCtrl + V を拾い、その時点で、OperationModeをNormalに変更し、ClipboardPasting中に再びOperationModeをExtendedSelectに戻すという方法で実現できました。

荒業っぽくてあまり気に入っていません。ほかに良い方法があればぜひご教授願います。
以上です。[野球]






C# データテーブルの検索、削除 [.NET]

データテーブルに入っている項目を見つける、削除するという処理について記録します。

レコードを探すにはSelectメソッドを使用しました。
DataRow[] oDelRows = oTbl.Select("cd=" + 値);

これで、DataRowの配列を返してくれます。
今回のパターンではcdという列は主キーなので1行しか返ってきません。

次にその行を削除します。
oTbl.Rows.Remove(oDelRows[0]);

仮に複数行削除したい場合は、
oDelRowsをforeachなどで回しつつ削除すればいいかもしれません。

以上です。[レストラン]

Grapecity Spread スクロール列固定 [.NET]

Grapecity Spreadで列をスクロールさせない方法をメモします。

メニューの全般をクリックします。
20170111-1.PNG

固定列数の設定で固定したい列を設定します。
20170111-2.PNG

これだけなのですが、時間が空くと忘れて毎回探してしまうので、メモします。
以上です。[ふらふら]