[C#] DataTableからデータを抽出して別のDataTableにコピーする

まず、DataTableをまるごとコピーするには以下のようにする。
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
// dt2にdt1をコピー
dt2 = dt1.Copy();

データを抽出して別のDataTableにコピーするには以下のようにする。
foreach (DataRow row in dt1.Select("type = 'A'"))
{
   dt2.ImportRow(row);
}

[C#] DataTableの行を削除する

MSDNにあるとおり、Delete メソッドを使用する。
// dtはDataTable
dt.Rows[0].Delete();
で、これでOKかと思いきや、これだけでは単に「delete」というマークをつけたに過ぎない。実際の行を削除するわけではない。
で、これをコミットするにはDataTable.AcceptChanges メソッドを使用する。
dt.AcceptChanges();
このメソッドによりマークをつけた行を削除することができるはず。
なお、DataRowCollection.Remove メソッドを使用すればいきなり削除できる。
が、こちらはRemove()に削除対象のDataRowを引数として渡すので、
// iは添字
dt.Rows.Remove(dt.Rows[i]);
こういう感じになる。
削除マークをつけて値をチェックする必要がない場合はRemove() が一般的なのかもしれない。

[ASP.NET] ポストバック後にスクロールさせない

業務用アプリで、(操作しにくいのだが)縦に長い画面があったりする。
さらにその画面にボタンがあってポストバックが発生するアレな画面があったりする。
で、ポストバック時に必ず画面上部に戻されるのが嫌がられる。

画面がアレだと言いたいところだが、なんとかしなければならない。

Page.MaintainScrollPositionOnPostBack プロパティはそんな要望をかなえてくれる。

これでスクロールしなくなるはずだ。
なお、以前のバージョン(.NET Framework1.1)で使用されていたPage.SmartNavigationは推奨されない。
ブラウザに依存するらしい。

[VB.NET] Nothingの代入は暗黙的な初期化と同じ

.NET開発を始めるVB6プログラマーが知るべき9のこと
VBはもう最近ではやっていないのだが、なかなか興味深い。昔から言われてきたことが、今でもまだ言われ続けていることがVB6の呪縛の強さを表していると思う。

Nothingの扱いが面白い。初期値が代入されるらしい。
調べたら初期値とは以下のことらしい。

すべての数値型 (Byte および SByte を含む): 0
Char: バイナリの 0
すべての参照型 (Object、String、およびすべての配列を含む): Nothing
Boolean: False
Date: 西暦 1 年 1 月 1 日の午前 12:00 (01/01/0001 12:00:00 AM)

例えば参照型の文字型は、空ではなくNothingになる。

Dim s As String = ""
Console.WriteLine(s)
' ここでは空文字
s = Nothing
Console.WriteLine(s)
' Nothingになる

まぁ、いずれにせよ暗黙的な代入になるので、使用しないに越したことはないということだ。

[C#] DataTableを並び替えてからfor, foreachで列挙する。

DataRow[] rows = dt.Select("", "no");
foreach (DataRow row in rows)
{
 // なんか処理
}
Selectメソッドの第一引数には条件を指定する。
特に条件がない場合には上記の例のように空でも良い。
第二引数には並び替えをする列名を指定する。この場合は「no」という列を昇順指定している。
「desc」キーワードで降順にすることもできる。