【问题标题】:ASP.net GridView not Inserting from FooterTemplateASP.net GridView 未从 FooterTemplate 插入
【发布时间】:2011-06-07 10:27:07
【问题描述】:

我被困住了。我实现了将新数据库值从 GridView FooterTemplate 中的复选框和文本框控件插入 SQLDataSource 所需的所有步骤,但是当我单击“添加”按钮以触发插入命令时,我的页面闪烁并且没有插入发生。就实际的 SQL 而言,我为 GridView 的 DataSource 的插入操作设置了一个存储过程。我已经单独测试了该程序,它工作正常。

我的设计基于这篇文章:http://www.aspdotnetfaq.com/Faq/How-to-insert-row-in-GridView-with-SqlDataSource.aspx 我的错误可能在我的事件处理程序的某个地方。知道我错过了什么吗?

发布所有 GridView 代码会太长,所以这里是要点:

插入按钮的页脚模板:

    <asp:GridView ID="CartonGridView" runat="server" AutoGenerateColumns="False" 
            CellPadding="6" DataKeyNames="CartonID" Width="100%"
            DataSourceID="Carton_Table" ForeColor="#333333" 
            GridLines="None" AllowSorting="True">
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <Columns>
                <asp:TemplateField ShowHeader="False">
                    <EditItemTemplate>
                        <asp:Button ID="Button1" runat="server" CausesValidation="True" 
                            CommandName="Update" Text="Update" />
                        <asp:Button ID="Button2" runat="server" CausesValidation="False" 
                            CommandName="Cancel" Text="Cancel" />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Button ID="Button1" runat="server" CausesValidation="False" 
                            CommandName="Edit" Text="Edit" />
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:Button ID="Button1" runat="server" CausesValidation="True" 
                            CommandName="Insert" Text="Add" />
                        <asp:Button ID="Button2" runat="server" CausesValidation="False" 
                            CommandName="Cancel" Text="Cancel" />
                    </FooterTemplate>
                </asp:TemplateField>
                ...

SQLDataSource 绑定到 Gridview:

<asp:SqlDataSource ID="Carton_Table" runat="server" 
            ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
            InsertCommand="spCartonInsert" InsertCommandType="StoredProcedure" 
            SelectCommand="spCartonSelect" SelectCommandType="StoredProcedure" 
            UpdateCommand="spCartonUpdate" UpdateCommandType="StoredProcedure">
            ...
            <InsertParameters>
                <asp:Parameter Name="Active"               Type="Boolean" />
                <asp:Parameter Name="Value"        Type="String" />
                <asp:Parameter Name="Description"      Type="String" />
            </InsertParameters>

插入事件处理程序:

protected void CartonGridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {

            if (e.CommandName == "Insert")
            {
                CheckBox Active = CartonGridView.FooterRow.FindControl("InsertActive") as CheckBox;
                TextBox SAPCode = CartonGridView.FooterRow.FindControl("InsertSAPCode") as TextBox;
                TextBox Description = CartonGridView.FooterRow.FindControl("InsertDescription") as TextBox;

                SqlParameter paramActive = new SqlParameter("@Active", SqlDbType.Bit);
                paramActive.Direction = ParameterDirection.Input;
                paramActive.Value = Active.Checked;
                insertParameters.Add(paramActive);

                SqlParameter paramValue = new SqlParameter("@Value", SqlDbType.NVarChar, 30);
                paramValue.Direction = ParameterDirection.Input;
                paramValue.Value = paramValue.Text;
                insertParameters.Add(paramValue);

                SqlParameter paramDescription = new SqlParameter("@SAP_Long_Description", SqlDbType.NVarChar, 250);
                paramDescription.Direction = ParameterDirection.Input;
                paramDescription.Value = Description.Text;
                insertParameters.Add(paramDescription);

                Carton_Table.Insert();
            }
        }

        protected void Carton_Table_Inserting(object sender, SqlDataSourceCommandEventArgs e)
        {
            e.Command.Parameters.Clear();
            foreach (SqlParameter p in insertParameters)
                e.Command.Parameters.Add(p);
        }

【问题讨论】:

  • sql 插入命令(sqldatasource)在哪里?也许有错误?
  • @Aristos - 我添加了指定 GridView 对插入过程的引用的代码,但正如我之前所说,SP 本身工作正常。

标签: asp.net gridview


【解决方案1】:

是的,事件处理程序没有连接。

<asp:GridView ID="CartonGridView" runat="server" AutoGenerateColumns="False" 
            CellPadding="6" DataKeyNames="CartonID" Width="100%"
            DataSourceID="Carton_Table" ForeColor="#333333" 
            GridLines="None" AllowSorting="True" 
onrowcommand="CartonGridView_RowCommand">

【讨论】:

  • 做到了!非常感谢gb。作为记录,我还必须将 OnInsert 处理程序连接到我的 Carton_Table_Inserting()。
猜你喜欢
  • 1970-01-01
  • 2013-11-22
  • 2013-08-26
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 2016-10-16
  • 1970-01-01
相关资源
最近更新 更多