6

データセットからデータテーブルにデータをフィルターするにはどうすればよいですか? コードのように->

DataRow[] dr = DS.Tables[0]
    .Select("STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL");        

ここでデータテーブルを使用するにはどうすればよいですか?

次のコードは変更を反映していません->

DataTable FilteredDataD = DS.Tables[0];
if (FilteredDataD.Rows.Count > 0) {
    FilteredDataD.DefaultView.RowFilter = "STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL";
    FilteredDataD.DefaultView.ToTable();
}

「STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL」 + FilteredDataD.column("col_name") のように、上記のフィルターを使用して列を削除することは可能です... 5 つの列に 4 しか表示されないとします。削除できません私のクエリからのcol_name.方法はありますか?

返事

4

2 に答える 2

11

代わりに LINQ を使用してみてください。

var table = DS.Tables[0].AsEnumerable().Where(
    r => r.Field<string>("STAGENAME") == "Develop" && r.Field<int?>("DEVLAPSEDAYS").HasValue).AsDataView().ToTable();

EDIT構文を正確にするために に変更AsDataViewしました。EDIT提供の.NET 2.0互換ソリューションAsDataView()

DataTable table = DS.Tables[0];
if (table.Rows.Count > 0)
{
    table.DefaultView.RowFilter = "STAGENAME = 'DEVELOP' AND DEVLAPSEDAYS IS NOT NULL";
    table = table.DefaultView.ToTable(); 
}
于 2012-04-25T14:10:34.483 に答える
6

次のように (C# 3 を使用して) 拡張メソッドを作成できます。

public static DataTable Filter(this DataTable dataTable, string selectFilter)
{
    var filteredTable = dataTable.Clone();
    var rows = dataTable.Select(selectFilter).ToList();
    rows.ForEach(filteredTable.ImportRow);
    return filteredTable;
}

次に、次のように使用します。

DataTable dataTable = DS.Tables[0]
    .Filter("STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL");

Update、C# 2.0 を使用していると言ったので (したがって、拡張メソッドと LINQ はオプションではありません)、代わりにこれを使用できます。

public static DataTable GetFilteredTable(
    DataTable sourceTable, string selectFilter)
{
    var filteredTable = sourceTable.Clone();
    var rows = sourceTable.Select(selectFilter);
    foreach (DataRow row in rows)
    {
        filteredTable.ImportRow(row);
    }
    return filteredTable;
}

DataTable dataTable = GetFilteredTable(
    DS.Tables[0], "STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL");
于 2012-04-25T14:10:10.083 に答える