我可以通过自动生成列将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();
答案 0 :(得分:3)
更改.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>
答案 1 :(得分:-1)
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);
}