2012-12-07 38 views
16

Tôi có một dữ liệu và muốn biết liệu có thể cho tôi chọn một số cột nhất định và nhập dữ liệu trên bảng hay không. các cột được đặt ra như bên dướichọn một số cột nhất định của bảng dữ liệu

| col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 | col9 | col10 | col11 |

Tôi muốn chọn cột col1, col2 col6, col7, col3. và phân phối dữ liệu trong một khung nhìn GridView của các hàng bên trong datatable .. hiện tại mã mà tôi đang sử dụng là dưới đây và onmly chọn dữ liệu nhất định. Tôi không chọn dữ liệu từ sql dữ liệu của nó được chọn từ một excel được lưu trữ trong một datatable .. nhưng tôi đang cần các cột khác trong khu vực khác cũng .. dữ liệu này được viết vào một bảng trong từ

for (int i = 1; i < table.Rows.Count; i++) 
      { 
       for (int j = 0; j < table.Columns.Count; j++) 
       { 
        if (j == 0) 
        { 
         val = filteredData.Rows[row][col].ToString(); 
        } 
        else 
        { 
         val = filteredData.Rows[row][col].ToString(); 

         if (val == "-" || val == "") 
         { 
          val = filteredData.Rows[row][col].ToString(); 

         } 
         else 
         { 
          val = Convert.ToString(Math.Round(Convert.ToDouble(filteredData.Rows[row][col]), MidpointRounding.AwayFromZero)); 

         } 
        } 

        table[j, i].TextFrame.Text = val; 
        col++; 
       } 
+0

Tại sao bạn không thể thử dt.Columns.Hủy bỏ ("column_name") – Anujith

+0

Tôi đã thử nhưng tôi yêu cầu các cột khác trong phần tiếp theo –

Trả lời

22

Lần đầu tiên lưu trữ bảng trong chế độ xem, sau đó chọn các cột từ chế độ xem đó vào bảng mới.

System.Data.DataTable table = new System.Data.DataTable(); 
for (int i = 1; i <= 11; i++) 
    table.Columns.Add("col" + i.ToString()); 

for (int i = 0; i < 100; i++) 
{ 
    System.Data.DataRow row = table.NewRow(); 
    for (int j = 0; j < 11; j++) 
     row[j] = i.ToString() + ", " + j.ToString(); 
    table.Rows.Add(row); 
} 

System.Data.DataView view = new System.Data.DataView(table); 
System.Data.DataTable selected = view.ToTable("Selected", false, "col1", "col2", "col6", "col7", "col3"); 

sử dụng dữ liệu mẫu để thử nghiệm phương pháp này tôi thấy: Create ADO.NET DataView showing only selected Columns

1

Câu hỏi tôi sẽ hỏi là, tại sao bạn bao gồm các cột bổ sung trong DataTable nếu chúng không bắt buộc?

Có thể bạn nên sửa đổi câu lệnh chọn SQL để xem xét các tiêu chí cụ thể mà bạn đang tìm kiếm khi bạn đang điền DataTable của mình.

Bạn cũng có thể sử dụng LINQ để truy vấn DataTable của bạn dưới dạng Enumerable và tạo đối tượng danh sách chỉ đại diện cho một số cột nhất định.

Ngoài ra, ẩn các cột DataGridView mà bạn không yêu cầu.

+0

Ông đã đề cập rằng, ông yêu cầu colounm khác cũng ở khu vực khác .. –

+0

@Derek Có thể thêm một điều kiện để lựa chọn ? – Smith

0

Dưới đây là ví dụ làm việc với kỷ lục sản lượng vô danh, nếu bạn có bất kỳ câu hỏi đặt một bình luận dưới đây:

public partial class Form1 : Biểu mẫu { bảng DataTable;

public Form1() 
    { 
     InitializeComponent(); 

     #region TestData 
     table = new DataTable(); 
     table.Clear(); 

     for (int i = 1; i < 12; ++i) 
      table.Columns.Add("Col" + i); 
     for (int rowIndex = 0; rowIndex < 5; ++rowIndex) 
     { 
      DataRow row = table.NewRow(); 
      for (int i = 0; i < table.Columns.Count; ++i) 
       row[i] = String.Format("row:{0},col:{1}", rowIndex, i); 
      table.Rows.Add(row); 
     } 
     #endregion 

     bind(); 
    } 

    public void bind() 
    { 
     var filtered = from t in table.AsEnumerable() 
         select new 
         { 
          col1 = t.Field<string>(0),//column of index 0 = "Col1" 
          col2 = t.Field<string>(1),//column of index 1 = "Col2" 
          col3 = t.Field<string>(5),//column of index 5 = "Col6" 
          col4 = t.Field<string>(6),//column of index 6 = "Col7" 
          col5 = t.Field<string>(4),//column of index 4 = "Col3" 
         }; 
     filteredData.AutoGenerateColumns = true; 
     filteredData.DataSource = filtered.ToList(); 
    } 
} 
31

Ngoài ra chúng tôi có thể thử như thế này,

string[] selectedColumns = new[] { "Column1","Column2"}; 

DataTable dt= new DataView(fromDataTable).ToTable(false, selectedColumns); 
+1

đây là gọn gàng và chính xác những gì tôi cần cho bộ điều khiển MVC của tôi mà tôi đã thiết kế để có một mảng chuỗi lựa chọnCol – bkwdesign

+0

Nó không chính xác giống như MrFox được đăng? Với sự khác biệt duy nhất mà bạn cũng tạo ra 'selectedColumns' mảng được sử dụng chỉ một lần và từ 2 dòng có chỉ 1. – Gondil

+0

No. hiệu suất khôn ngoan của nó tốt hơn so với truy vấn và mã tối ưu hóa cho một số cột bảng. –

0

Bạn có thể tạo một phương pháp mà trông như thế này:

public static DataTable SelectedColumns(DataTable RecordDT_, string col1, string col2) 
    { 
     DataTable TempTable = RecordDT_; 

     System.Data.DataView view = new System.Data.DataView(TempTable); 
     System.Data.DataTable selected = view.ToTable("Selected", false, col1, col2); 
     return selected; 
    } 

Bạn có thể trở lại như nhiều cột càng tốt .. chỉ cần thêm các cột dưới dạng thông số cuộc gọi như được hiển thị bên dưới:

public DataTable SelectedColumns(DataTable RecordDT_, string col1, string col2,string col3,...) 

và cũng thêm các thông số để dòng này:

System.Data.DataTable selected = view.ToTable("Selected", false,col1, col2,col3,...); 

Sau đó chỉ cần thực hiện các chức năng như:

DataTable myselectedColumnTable=SelectedColumns(OriginalTable,"Col1","Col2",...); 

Thanks ...

-1
DataView dv = new DataView(Your DataTable); 

DataTable dt = dv.ToTable(true, "Your Specific Column Name"); 

Các dt chứa chỉ chọn các giá trị cột .

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