2013-06-21 13 views
5

Próbuję znaleźć wartość z widoku danych przy użyciu nazwy kolumny. Mój zestaw danych pokazuje wartość, ale mój warunek if zwraca wartość false. Pracuję w asp.net przy użyciu C#.Znajdź wartość z widoku danych przy użyciu nazwy kolumny

Próbowałem z innym kodem. Próbuję uzyskać wartość jak ten

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

OR 

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

LUB

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

Poniżej znajduje mój zestaw danych enter image description here

+0

szukasz somthing jak ta http://msdn.microsoft.com/en-us/library/yth8t382%28v=vs.90%29.aspx? – Karthik

Odpowiedz

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()); 
} 

myślę, że może być rozwiązanie problemu, lub co przynajmniej wskaż ci właściwy kierunek.

2

Jeśli kolumna "GBA_Nbr_GBAcount" jest typem ciągu, może zawierać spacje. Powinieneś przyciąć tekst przed porównaniem. Wypróbuj to:

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

Możesz użyć Linq do wysłania zapytania do datatable lub do widoku danych. Na przykład, zakładając, że kolumna jest typu ciąg:

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"); 

Jeśli kolumna był liczbą całkowitą, wystarczy zmienić Field<string> do Field<int> i porównać z liczbą całkowitą, a nie ciągiem

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); 

przykładowej aplikacji za pomocą kolumna ciąg:

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(); 
} 

Jeśli naprawdę używasz ciągu znaków do kolumny, sprawdź białe spacje i zastosuj przycięcie, jeśli to konieczne.

1

Jednym sposobem sprawdzenia istnienia określonej kolumny w DataView byłoby tak:

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

Użyj obiektu DataViewManager zamiast to ma właściwość DataSet z nią związane oraz zestaw danych musi wszystko normalne funkcje zbioru danych. Tak, można przemierzać dataset.tables [Index] obiekt ...

Nadzieja pomaga

Przykład: dv.DataViewManager.DataSet.Tables[0].Rows[0][1]

Dzięki, Sam

+0

Co jeśli chcę ostatnią kolumnę pierwszego rzędu? – SearchForKnowledge

+0

jeśli chcesz dostać kolumna po kolumnie nazwy następnie używać tego var value = dv.DataViewManager.DataSet.Tables[0].Rows[0]["ColumnName"]; LUB jeśli chcesz dostać ostatnią kolumnę pierwszym rzędzie następnie użyj: int maxColumns = dv.DataViewManager.DataSet.Tables[0].Columns.Count; var value = dv.DataViewManager.DataSet.Tables[0].Rows[0][maxColumns - 1]; nadzieję, że jest zgodna z co pytali ... Dzięki, – Sam

+0

Jak wspomniano w dokumentacji, DataViews mogą być tworzone bez DataViewManager, w takim przypadku DataViewManager ma wartość null. – Dono

Powiązane problemy