2012-10-10 35 views
33

Tôi cần phải lặp lại kiểu dữ liệu cột và cột từ một hàng cụ thể. Tất cả các ví dụ tôi đã thấy đã lặp lại toàn bộ dữ liệu. Tôi muốn chuyển một hàng vào một hàm để thực hiện một loạt các xử lý có điều kiện. Tôi muốn tách riêng việc xử lý có điều kiện để dễ đọc.Tên DataColumn từ DataRow (không phải DataTable)

Đây là những gì tôi có:

private void doMore(DataRow dr) 
{ 
    foreach (DataColumn c in dr.ItemArray) //loop through the columns. 
    { 
     MessageBox.Show(c.ColumnName.ToString()); 
    } 
} 

Lỗi được thông báo là

System.InvalidCastException: Không thể bỏ đối tượng của loại 'System.String' gõ 'System.Data.DataColumn '.

Làm cách nào để lấy tên cột từ hàng hoặc tôi không có lựa chọn và phải chuyển toàn bộ dữ liệu vào hàm?

+0

Bạn có thực sự muốn hiển thị cột hoặc dữ liệu trong hàng không? –

Trả lời

57

Bạn vẫn cần phải trải qua lớp học DataTable. Nhưng bạn có thể làm như vậy bằng cách sử dụng phiên bản DataRow bằng cách sử dụng thuộc tính Table.

foreach (DataColumn c in dr.Table.Columns) //loop through the columns. 
{ 
    MessageBox.Show(c.ColumnName); 
} 
+2

Cảm ơn, đó là chính xác những gì tôi cần. –

-5

sử dụng đối tượng DataTable thay vì:

private void doMore(DataTable dt) 
    { 
    foreach(DataColumn dc in dt.Columns) 
    { 
    MessageBox.Show(dc.ColumnName); 
    } 
    } 
+8

-1: OP đặc biệt nói rằng anh ta chỉ muốn chuyển một 'DataRow' sang phương thức của mình. –

5

Bạn cần một cái gì đó như thế này:

foreach(DataColumn c in dr.Table.Columns) 
{ 
    MessageBox.Show(c.ColumnName); 
} 
9

Bạn có thể làm cho nó dễ dàng hơn trong mã của bạn (nếu bạn đang làm điều này rất nhiều nào) bằng cách sử dụng phần mở rộng trên đối tượng DataRow, như:

static class Extensions 
{ 
    public static string GetColumn(this DataRow Row, int Ordinal) 
    { 
     return Row.Table.Columns[Ordinal].ColumnName; 
    } 
} 

Sau đó gọi nó bằng cách sử dụng:

string MyColumnName = MyRow.GetColumn(5); 
Các vấn đề liên quan