为List<>创建自定义gridview模板字段

时间:2012-07-26 21:11:04

标签: asp.net list gridview

我有一个字符串列表。我想使用gridview向用户显示它。由于列数未知,我决定动态创建gridview字段。我发现了一些tutorials,但他们都使用了DataTable。我尝试使用相同但我有数据绑定事件的问题" _columnName" :

    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 个答案:

答案 0 :(得分:1)

更简单的方法是将AutoGenerateColumns设置为true并使用DataTable作为数据源。

例如(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();