使用列名从数据视图中查找值

时间:2013-06-21 08:34:08

标签: c# asp.net asp.net-mvc ado.net

我正在尝试使用列名从dataview中查找值。我的数据集显示值,但我的if条件返回false。我使用c#在asp.net中工作。

我尝试过不同的代码。我想要获得像这样的价值

dv[0].DataView.Table.Columns[0].ToString().Contains("52")
   //RETURN FALSE

OR

dv[0].Equals("52")
   // //RETURN FALSE

OR

dv[0].Find("52")
   // //RETURN FALSE

以下是我的数据集 enter image description here

5 个答案:

答案 0 :(得分:2)

如果“GBA_Nbr_GBAccount”列是字符串类型,则它可能包含空格。 您应该在比较之前修剪文本。试试这个

dv[0]["GBA_Nbr_GBAccount"].ToString().Trim().Equals("52");

答案 1 :(得分:1)

您可以使用Linq查询数据表或数据视图。例如,假设您的列的类型为string:

var condition = yourDataTable.AsEnumerable()
                             .Any(r => r.Field<string>("GBA_Nbr_GBAccount") == "52");

var condition = yourDataView.Cast<DataRowView>()
                            .Any(rv => rv.Row.Field<string>("GBA_Nbr_GBAccount") == "52");

如果列是整数,只需将Field<string>更改为Field<int>并与整数进行比较,而不是字符串

var condition = yourDataTable.AsEnumerable()
                             .Any(r => r.Field<int>("GBA_Nbr_GBAccount") == 52);

var condition = yourDataView.Cast<DataRowView>()
                            .Any(rv => rv.Row.Field<int>("GBA_Nbr_GBAccount") == 52);

使用字符串列的示例应用程序:

static void Main(string[] args)
{
    DataSet dataset = new DataSet();
    dataset.Tables.Add(new DataTable("table1"));
    dataset.Tables[0].Columns.Add(new DataColumn("Value", typeof(string)));
    dataset.Tables[0].Rows.Add("10");
    dataset.Tables[0].Rows.Add("52");

    DataTable table = dataset.Tables[0];
    DataView view = table.DefaultView;

    var condition1 = table.AsEnumerable().Any(r => r.Field<string>("Value") == "52");

    var condition2 = view.Cast<DataRowView>().Any(rv => rv.Row.Field<string>("Value") == "52");

    Console.WriteLine(String.Format("Result querying datatable: '{0}'. Result using dataview:'{1}'", condition1, condition2));
     Console.ReadLine();
}

如果您确实在列中使用字符串,请检查空格并根据需要应用修剪。

答案 2 :(得分:1)

检查数据视图中是否存在特定列的一种方法如下:

if (dv.Table.Columns["Name"] != null)
{
//Name column exists. Add Logic here
}

答案 3 :(得分:1)

使用DataViewManager对象 它具有与之关联的DataSet属性,并且数据集具有所有常规数据集功能。因此,您可以遍历dataset.tables [index] object ...

希望有所帮助

示例dv.DataViewManager.DataSet.Tables[0].Rows[0][1]

谢谢, 萨姆

答案 4 :(得分:0)

int rowIndex = dv.Find("52");

if (rowIndex == -1) {
    Console.WriteLine("No match found.");
} 
else {
    Console.WriteLine("{0}, {1}", 
    dv(rowIndex)("GBA_Nbr_GBAccount").ToString(), 
    dv(rowIndex)("GBA_Nam_GBAccount").ToString());
}

我认为这可能是您问题的解决方案,或者至少指出您正确的方向。