2013-06-21 22 views
5

Tôi đang cố gắng tìm giá trị từ dataview bằng cách sử dụng tên cột. Tập dữ liệu của tôi hiển thị giá trị nhưng điều kiện if của tôi trả về false. Tôi đang làm việc trong asp.net bằng cách sử dụng C#.Tìm giá trị từ dataview bằng cách sử dụng tên cột

Tôi đã thử với mã khác. Tôi cố gắng để có được giá trị như thế này

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

OR 

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

HOẶC

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

Tiếp theo là bộ dữ liệu của tôi enter image description here

+0

Bạn đang tìm kiếm somthing như thế này http://msdn.microsoft.com/en-us/library/yth8t382%28v=vs.90%29.aspx? – Karthik

Trả lời

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

Tôi nghĩ rằng có thể là giải pháp cho vấn đề của bạn, hoặc tại rất ít điểm bạn đi đúng hướng.

2

Nếu cột "GBA_Nbr_GBAccount" là loại chuỗi, cột này có thể chứa khoảng trắng. Bạn nên cắt văn bản trước khi so sánh. Hãy thử điều này

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

Bạn có thể sử dụng Linq để truy vấn dữ liệu hoặc dataview. Ví dụ, giả sử cột của bạn là kiểu 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"); 

Nếu cột là một số nguyên, chỉ cần thay đổi Field<string>-Field<int> và so sánh với một số nguyên, không phải là một chuỗi

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

ứng dụng Ví dụ sử dụng chuỗi cột:

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

Nếu bạn đang thực sự sử dụng chuỗi cho cột, hãy kiểm tra khoảng trắng và áp dụng cắt nếu cần.

1

Một cách để kiểm tra sự tồn tại của một cột cụ thể trong một dataview sẽ là như sau:

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

Sử dụng đối tượng DataViewManager thay nó có một tài sản DataSet liên kết với nó và các tập dữ liệu có tất cả các tính năng tập dữ liệu thông thường. Vì vậy, bạn có thể đi qua dataset.tables [index] đối tượng ...

Hy vọng nó giúp

Ví dụ: dv.DataViewManager.DataSet.Tables[0].Rows[0][1]

Cảm ơn, Sam

+0

Nếu tôi muốn cột cuối cùng của hàng đầu tiên thì sao? – SearchForKnowledge

+0

nếu bạn muốn để có được cột bằng tên cột sau đó sử dụng này var value = dv.DataViewManager.DataSet.Tables[0].Rows[0]["ColumnName"]; HOẶC nếu bạn muốn để có được cột cuối cùng của dòng đầu tiên sau đó sử dụng này: int maxColumns = dv.DataViewManager.DataSet.Tables[0].Columns.Count; var value = dv.DataViewManager.DataSet.Tables[0].Rows[0][maxColumns - 1]; Hy vọng nó sẽ là phù hợp về những gì bạn đã yêu cầu ... Cảm ơn, – Sam

+0

Như đã đề cập trong tài liệu, DataViews có thể được tạo mà không có một DataViewManager, và trong trường hợp đó DataViewManager là null. – Dono

Các vấn đề liên quan