【问题标题】:Binding a DataTable to Template Fields of a GridView将 DataTable 绑定到 GridView 的模板字段
【发布时间】:2014-08-18 20:49:00
【问题描述】:

我可以通过自动生成列成功地将 DataTable 绑定到 GridView,但我需要为其中一列显示多行单元格。为此,我想使用带有 TextBox 对象的项目模板的模板字段。我通过添加列然后添加行来填充 DataTable。我知道我的数据表设置正确,因为它显示了我想要的所有数据(多行单元格除外)。我的问题是让 gridview 根据列名提取我的数据并填写我设置的模板字段。如果我关闭 AutoGenerateColumns,那么 4 个模板字段列仍然会出现(根据数据表也显示正确的数量),只是空白,如果我将其设置为 true,那么会出现 4 个空白列以及 4 个附加列包含我的数据的相同标题使用单元格包含的默认值来显示信息。

    <asp:GridView ID="DataGrid1" runat="server" AutoGenerateColumns="False"     HeaderStyle-BorderStyle="None" CellPadding="3" ItemStyle-Wrap="true" >
    <Columns>
        <asp:TemplateField HeaderText="Code">
            <asp:ItemTemplate>
                <asp:Label ID="txtCode" runat="server" Text='<%# Eval("Code") %>'>

                </asp:Label>
            </asp:ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Title">
            <asp:ItemTemplate>
                <asp:Label ID="txtTitle" runat="server" Text='<%# Eval("Title") %>'>

                </asp:Label>
            </asp:ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Class">
            <asp:ItemTemplate>
                <asp:Label ID="txtClass" runat="server" Text='<%# Eval("Class") %>'>

                </asp:Label>
            </asp:ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="History">
            <asp:ItemTemplate>
                <asp:TextBox ID="txtHistory" runat="server" IsReadOnly="true" Text='<%# Eval("History")%>'>
                </asp:TextBox>
            </asp:ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

以上是我的 asp.net 代码中与相关 GridView 相关的部分。以下是我如何设置我的 DataTable 并绑定它。

DataTable table = new DataTable();
table.Columns.Add("Code", typeof(string));
table.Columns.Add("Title", typeof(string));
table.Columns.Add("Class", typeof(string));
table.Columns.Add("History", typeof(string));
for (int i = 0; i < index; i++)
{
    table.Rows.Add(docs[i].Code, docs[i].Name, docs[i].Class.Name, history[i]);
}
DataGrid1.DataSource = table;
DataGrid1.DataBind();

【问题讨论】:

    标签: c# asp.net gridview datatable


    【解决方案1】:

    如下更改 .aspx 代码

      <Columns>
            <asp:TemplateField HeaderText="Code">
                <ItemTemplate>
                    <asp:Label ID="txtCode" runat="server" Text='<%# Eval("Code") %>'>
    
                    </asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Title">
                <ItemTemplate>
                    <asp:Label ID="txtTitle" runat="server" Text='<%# Eval("Title") %>'>
    
                    </asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Class">
                <ItemTemplate>
                    <asp:Label ID="txtClass" runat="server" Text='<%# Eval("Class") %>'>
    
                    </asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="History">
                <ItemTemplate>
                    <asp:TextBox ID="txtHistory" runat="server" IsReadOnly="true" 
                            Text='<%# Eval("History")%>'>
                    </asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    

    【讨论】:

      【解决方案2】:
           foreach (GridViewRow grdRow in grdMenuPermitted.Rows)
              {
                  DataRow drow = dt.NewRow();
      
                  Label lblMenuName = (Label)grdRow.FindControl("lblMenuName");
      
                  HiddenField hdnID = (HiddenField)grdRow.FindControl("hdnID");
      
                  drow["MenuName"] = lblMenuName.Text;//grdRow.Cells[0].Text;                
                  drow["MenuID"] = hdnID.Value;
                  //drow["lname"] = grdRow.Cells[3].Text;
                  dt.Rows.Add(drow);
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-30
        • 2014-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多