2012-07-26 42 views
0

我有一個列表字符串列表。我想使用gridview將其顯示給用戶。由於不知道列數,我決定動態創建gridview字段。我發現了一些tutorials,但他們都使用DataTable。我試圖用相同的,但我有一個數據綁定事件的「_columnName」的問題:爲列表創建自定義gridview模板字段<>

void field_DataBinding(object sender, EventArgs e) 
    { 

     TextBox txtdata = (TextBox)sender; 

     GridViewRow container = (GridViewRow)txtdata.NamingContainer; 

     object dataValue = DataBinder.Eval(container.DataItem, _columnName); 

     if (dataValue != DBNull.Value) 
     { 
      txtdata.Text = dataValue.ToString(); 
     } 

    } 

,因爲在列表中沒有列。任何建議表示讚賞。

回答

1

更簡單的方法是將AutoGenerateColumns設置爲true並將DataTable用作DataSource。

例如(在ASPX可以是空的GridView):

List<List<String>> data = new List<List<String>>() { 
    new List<String>(){"Row1_Col1", "Row1_Col2", "Row1_Col3"}, 
    new List<String>(){"Row2_Col1", "Row2_Col2", "Row2_Col3"}, 
    new List<String>(){"Row3_Col1", "Row3_Col2", "Row3_Col3"}, 
    new List<String>(){"Row4_Col1", "Row4_Col2", "Row4_Col3"}, 
    new List<String>(){"Row5_Col1", "Row5_Col2", "Row5_Col3"}, 
}; 
var tbl = new DataTable(); 
int maxFieldCount = data.Max(l => l.Count); 
for (int i = 1; i <= maxFieldCount; i++) 
    tbl.Columns.Add("Column" + i); 
foreach (var list in data) 
{ 
    DataRow newRow = tbl.Rows.Add(); 
    newRow.ItemArray = list.ToArray(); 
} 

現在可以使用的GridView作爲數據源:

GridView1.DataSource = tbl; 
GridView1.DataBind();