-1

どこにも答えが見つかりません...次のようにList<string[]>が入力されています。

...
while (myReader.Read())
{
    string[] row = new string[myInt];

    for (int i = 0; i < myInt; i++)
    {
        row[i] = myReader[i].ToString();
    }

    myList.Add(row);    
}
...

このリストをTemplateField列のあるグリッドビューにバインドするにはどうすればよいですか?

4

3 に答える 3

3

より簡単な方法は、匿名クラスを作成し、それをGridViewにバインドすることです。例:

var query = from c in row
            select new { SomeProperty = c };

GridView.DataSource=query;
GridView.DataBind();
于 2012-10-01T20:14:32.910 に答える
1

あなたはいつでものRowDataBoundイベントを使用することができますGridView

<asp:GridView ID="gridView1" runat="server" 
    OnRowDataBound="gridView1_DataBound">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="myLabel" runat="server"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

データをバインドする場合:

var myStrings = new List<string[]>
                      {
                          new [] { "hello", "bye"},
                          new [] { "1", "2"}
                      };

gridView1.DataSource = myStrings;
gridView1.DataBind();

RowDataBoundイベント:

public void gvDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType != DataControlRowType.DataRow)
    {
        return;
    }

    var item = (string[]) e.Row.DataItem;
    Label myLabel = e.Row.FindControl("myLabel") as Label;
    myLabel.Text = item[0];
}
于 2012-10-01T20:07:21.910 に答える
0

通常どおりにdatabindを使用するだけです。列を参照するために、デフォルトでインデックスを使用します。だからこのように:

<asp:GridView runat="server" AutoGenerateColumns="false" ID="rpt">
<Columns>
    <ItemTemplate>
        <%# Eval("Key") %>
    </ItemTemplate>
</Columns>
</asp:Repeater>

Dictionary<string, string> lst = new Dictionary<string, string>();
lst.Add("test", String.Empty);
lst.Add("test1", String.Empty);
this.rpt.DataSource = lst;
this.rpt.DataBind();
于 2012-10-01T19:59:20.693 に答える