0

文字列のリストのリストがあります。gridviewを使用してユーザーに表示したい。列の数がわからないため、グリッドビューフィールドを動的に作成することにしました。いくつかのチュートリアルを見つけましたが、それらはすべて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();
        }

    }

リストに列がないため。任意の提案をいただければ幸いです。

4

1 に答える 1

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();
于 2012-07-26T21:31:29.113 に答える