ASP.net的GridView不是从FooterTemplate插入 [英] ASP.net GridView not Inserting from FooterTemplate

查看:73
本文介绍了ASP.net的GridView不是从FooterTemplate插入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我卡住了。我实现插入从一个GridView FooterTemplate一个复选框和文本框控件新的DB值到一个SqlDataSource所需的所有步骤,但是当我点击我的添加按钮来触发插入命令,我的网页会闪烁,没有插入发生。至于实际的SQL来讲,我有一个存储过程中设置到GridView的DataSource的插入动作。我已分别测试程序,它工作正常。

我根据我的这篇文章设计:的http://www.aspdotnetfaq.com/Faq/How-to-insert-row-in-GridView-with-SqlDataSource.aspx我的错误应该是介于我的事件处理程序。任何想法,我缺少的是什么?

这将是太长张贴在GridView控件code,所以这里是要领:

FooterTemplate为插入按钮:

 < ASP:GridView控件ID =CartonGridView=服务器的AutoGenerateColumns =FALSE
            CELLPADDING =6的DataKeyNames =CartonIDWIDTH =100%
            的DataSourceID =Carton_Table前景色=#333333
            网格线=无AllowSorting =真>
            < RowStyle的BackColor =#F7F6F3前景色=#333333/>
            <柱体和GT;
                < ASP:的TemplateField ShowHeader =FALSE>
                    <&EditItemTemplate的GT;
                        < ASP:按钮的ID =Button1的=服务器的CausesValidation =真
                            的CommandName =更新文本=更新/>
                        < ASP:按钮的ID =Button2的=服务器的CausesValidation =FALSE
                            的CommandName =取消文本=取消/>
                    < / EditItemTemplate中>
                    <&ItemTemplate中GT;
                        < ASP:按钮的ID =Button1的=服务器的CausesValidation =FALSE
                            的CommandName =编辑文本=编辑/>
                    < / ItemTemplate中>
                    < FooterTemplate>
                        < ASP:按钮的ID =Button1的=服务器的CausesValidation =真
                            的CommandName =插入文本=添加/>
                        < ASP:按钮的ID =Button2的=服务器的CausesValidation =FALSE
                            的CommandName =取消文本=取消/>
                    < / FooterTemplate>
                < / ASP:的TemplateField>
                ...

的SqlDataSource绑定到GridView的:

 < ASP:SqlDataSource的ID =Carton_Table=服务器
            的ConnectionString =下;%$的ConnectionStrings:DBConnectionString%>中
            将InsertCommand =spCartonInsertInsertCommandType =StoredProcedure的
            的SelectCommand =spCartonSelectSelectCommandType =StoredProcedure的
            更新命令=spCartonUpdateUpdateCommandType =StoredProcedure的>
            ...
            < InsertParameters>
                < ASP:参数名称=活动类型=布尔/>
                < ASP:参数名称=值类型=字符串/>
                < ASP:参数名称=说明类型=字符串/>
            < / InsertParameters>

插入事件处理程序:

 保护无效CartonGridView_RowCommand(对象发件人,GridViewCommandEventArgs E)
        {            如果(e.CommandName ==插入)
            {
                复选框活动= CartonGridView.FooterRow.FindControl(InsertActive)的复选框;
                文本框SAP code = CartonGridView.FooterRow.FindControl(InsertSAP code)的文本框;
                文本框说明= CartonGridView.FooterRow.FindControl(InsertDescription)的文本框;                的SqlParameter paramActive =新的SqlParameter(@活动,SqlDbType.Bit);
                paramActive.Direction = ParameterDirection.Input;
                paramActive.Value = Active.Checked;
                insertParameters.Add(paramActive);                的SqlParameter paramValue =新的SqlParameter(@值,SqlDbType.NVarChar,30);
                paramValue.Direction = ParameterDirection.Input;
                paramValue.Value = paramValue.Text;
                insertParameters.Add(paramValue);                的SqlParameter paramDescription =新的SqlParameter(@ SAP_Long_Description,SqlDbType.NVarChar,250);
                paramDescription.Direction = ParameterDirection.Input;
                paramDescription.Value = Description.Text;
                insertParameters.Add(paramDescription);                Carton_Table.Insert();
            }
        }        保护无效Carton_Table_Inserting(对象发件人,SqlDataSourceCommandEventArgs E)
        {
            e.Command.Parameters.Clear();
            的foreach(在insertParameters的SqlParameter P)
                e.Command.Parameters.Add(P);
        }


解决方案

是的,在事件处理函数不是有线的。

 < ASP:GridView控件ID =CartonGridView=服务器的AutoGenerateColumns =FALSE
            CELLPADDING =6的DataKeyNames =CartonIDWIDTH =100%
            的DataSourceID =Carton_Table前景色=#333333
            网格线=无AllowSorting =真
onrowcommand =CartonGridView_RowCommand>

I'm stuck. I implemented all steps needed to insert new DB values from a checkbox and textbox controls in a GridView FooterTemplate into a SQLDataSource, but when I click my "Add" button to fire the Insert command, my page flashes and no insert occurs. As far as the actual SQL is concerned, I have a stored procedure set to the GridView's DataSource's insert action. I have separately tested the procedure and it works fine.

I based my design on this article: http://www.aspdotnetfaq.com/Faq/How-to-insert-row-in-GridView-with-SqlDataSource.aspx My error is probably somewhere in my event handlers. Any idea what I'm missing?

It would be too long to post all of the GridView code, so here are the essentials:

FooterTemplate for insert button:

    <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 Binding to 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>

Insertion Event Handlers:

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);
        }

解决方案

Yep, the event-handler is not wired-up.

<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">

这篇关于ASP.net的GridView不是从FooterTemplate插入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆