创建网格视图数据表/源代码隐藏错误

本文关键字:源代码 隐藏 错误 数据表 网格 视图 创建 | 更新日期: 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中不存在。