创建网格视图数据表/源代码隐藏错误
本文关键字:源代码 隐藏 错误 数据表 网格 视图 创建 | 更新日期: 2023-09-27 18:34:06
在我的页面上,有两个网格视图,其中使用代码隐藏动态地将数据添加到其中。据我所知,代码没有问题,第一个网格视图运行良好,但是一旦我想将数据添加到第二个网格视图,它就会给我以下错误:
Column 'LabourType' does not belong to table Table1
这是我首先初始化劳动网格时给出的错误(一切都很好(。但是,如果我先初始化 PartsGrid,它会给我同样的错误,只是使用零件网格的第一列名称。
这是我在Page_Load所做的:
DataTable dtParts;
DataTable dtLabour;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
PopulateCustomers();
dtLabour = new DataTable();
MakeDataTableLabour();
EmptyDataStringLabour();
this.gvLabour.EditIndex = -1;
dtParts = new DataTable();
MakeDataTableParts();
EmptyDataStringParts();
this.gvParts.EditIndex = -1;
}
else
{
dtLabour = (DataTable)ViewState["DataTable"];
dtParts = (DataTable)ViewState["DataTable"];
}
ViewState["DataTable"] = dtLabour;
ViewState["DataTable"] = dtParts;
}
谁能告诉我我是否做错了什么?或者如何解决此问题以允许动态添加数据的两个网格?提前致谢
编辑 - 更多数据
对于零件网格,这是我创建数据并将其添加到数据表的方式:
private void MakeDataTableParts()
{
dtParts.Columns.Add("Units");
dtParts.Columns.Add("PartNo");
dtParts.Columns.Add("Description");
dtParts.Columns.Add("CostPrice");
}
private void AddToDataTableParts()
{
DataRow drParts = dtParts.NewRow();
drParts["Units"] = txtUnits.Text.Trim();
drParts["PartNo"] = txtPartNo.Text.Trim();
drParts["Description"] = txtDescription.Text.Trim();
drParts["CostPrice"] = txtCostPrice.Text.Trim();
dtParts.Rows.Add(drParts);
}
private void BindGridParts()
{
gvParts.DataSource = dtParts;
gvParts.DataBind();
}
对于劳动:
private void MakeDataTableLabour()
{
dtLabour.Columns.Add("Units");
dtLabour.Columns.Add("LabourType");
dtLabour.Columns.Add("LabourCost");
}
private void AddToDataTableLabour()
{
DataRow drLabour = dtLabour.NewRow();
drLabour["Units"] = txtLabourUnits.Text;
drLabour["LabourType"] = lstLabourType.SelectedValue.ToString();
drLabour["LabourCost"] = txtLabourCost.Text;
dtLabour.Rows.Add(drLabour);
}
private void BindGridLabour()
{
gvLabour.DataSource = dtLabour;
gvLabour.DataBind();
}
这就是我的网格视图是如何在.aspx中创建的部件:
<asp:GridView ID="gvParts" runat="server" AutoGenerateColumns="true" CellPadding="8" CellSpacing="8" AllowPaging="false"
Width="100%" OnPageIndexChanging="gvParts_PageIndexChanging" OnRowCommand="gvParts_RowCommand"
OnRowCancelingEdit="gvParts_RowCancelingEdit" OnRowEditing="gvParts_RowEditing"
OnRowUpdating="gvParts_RowUpdating" OnRowDeleting="gvParts_RowDeleting" >
<emptydatatemplate>
There are currently no parts listed.
</emptydatatemplate>
<Columns>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:LinkButton ID="lnkEditParts" runat="server"CommandName="EditParts" CommandArgument='<%# Container.DataItemIndex %>'>Edit</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:LinkButton ID="lnkRemoveParts" runat="server" CommandName="DeleteParts" CommandArgument='<%# Container.DataItemIndex %>'>Remove</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="Grid" />
<RowStyle CssClass="rowStyle" />
<AlternatingRowStyle CssClass="alt" />
<PagerStyle CssClass="pgr" />
</asp:GridView>
劳动:
<asp:GridView ID="gvLabour" runat="server" AutoGenerateColumns="true" CellPadding="8" CellSpacing="8" AllowPaging="false"
Width="100%" OnPageIndexChanging="gvLabour_PageIndexChanging" OnRowCommand="gvLabour_RowCommand"
OnRowCancelingEdit="gvLabour_RowCancelingEdit" OnRowEditing="gvLabour_RowEditing"
OnRowUpdating="gvLabour_RowUpdating" OnRowDeleting="gvLabour_RowDeleting" >
<emptydatatemplate>
There are currently no labour listed.
</emptydatatemplate>
<Columns>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:LinkButton ID="lnkEditLabour" runat="server"CommandName="EditLabour" CommandArgument='<%# Container.DataItemIndex %>'>Edit</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:LinkButton ID="lnkRemoveLabour" runat="server" CommandName="DeleteLabour" CommandArgument='<%# Container.DataItemIndex %>'>Remove</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="Grid" />
<RowStyle CssClass="rowStyle" />
<AlternatingRowStyle CssClass="alt" />
<PagerStyle CssClass="pgr" />
</asp:GridView>
我将网格绑定在按钮单击事件(模式弹出(上,如下所示:
protected void btnSubmitPart_Click(object sender, EventArgs e)
{
AddToDataTableParts();
BindGridParts();
ClearPartsToAddNewItem();
}
protected void btnSubmitLabour_Click(object sender, EventArgs e)
{
AddToDataTableLabour();
BindGridLabour();
ClearLabourToAddNewItem();
}
错误是不言自明的。您已将列LabourType
设置为DataField
,或在其中一个GridView
的databing表达式中使用此列,但此列在DataSource
中不存在。