使用RowCommand在HeaderRow中执行“INSERT INTO”

时间:2014-04-02 20:13:17

标签: asp.net gridview insert-into

我正在尝试执行" INSERT INTO"在HeaderRow。

HeaderRow中的按钮不会触发RowCommand。

gridview包含5列:idt,datetime,col1,col2和col3。

Protected Sub gvtest_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles gvtest.RowCommand
    Dim txt1, txt2, txt3 as String
    If e.CommandName = "insertinto" Then
        Try
            txt1 = DirectCast(gvtest.HeaderRow.FindControl("tbins1"), TextBox).Text
            txt2 = DirectCast(gvtest.HeaderRow.FindControl("tbins2"), TextBox).Text
            txt3 = DirectCast(gvtest.HeaderRow.FindControl("tbins3"), TextBox).Text
            sqltest.InsertParameters("@datetime").DefaultValue = DateTime.Now()
            sqltest.InsertParameters("@col1").DefaultValue = txt1
            sqltest.InsertParameters("@col2").DefaultValue = txt2
            sqltest.InsertParameters("@col3").DefaultValue = txt3                
            sqltest.Insert()
        Catch ex As Exception
            TextBox1.Text = "Insert: " & ex.Message
        End Try
        gvtest.DataBind()
    End If
End Sub

的Default.aspx

<asp:GridView ID="gvtest"
    runat="server"
    DataSourceID="sqltest"
    AutoGenerateColumns="False"
    DataKeyNames="idt"
    OnRowCommand="gvtest_RowCommand">
<Columns>
        <asp:BoundField DataField="idt" HeaderText="idt" Readonly="true" SortExpression="idt" />
        <asp:BoundField DataField="datetime" HeaderText="datetime" SortExpression="datetime" />
        <asp:TemplateField SortExpression="col1">
            <HeaderTemplate>
                <asp:TextBox ID="tbins1" text="col1" runat="server" MaxLength="40" />
            </HeaderTemplate>
       </asp:TemplateField>
        <asp:TemplateField SortExpression="col2">
            <HeaderTemplate>
                <asp:TextBox ID="tbins2" text="col2" runat="server" MaxLength="40" />
            </HeaderTemplate>
        </asp:TemplateField>
        <asp:TemplateField SortExpression="col3">
            <HeaderTemplate>
                <asp:TextBox ID="tbins3" text="col3" runat="server" MaxLength="40" />
            </HeaderTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <HeaderTemplate>
                <asp:Button ID="btnins" CommandName="insertinto" runat="server" Text="Insert Into" OnClick="btnins_Click" />
            </HeaderTemplate>
</asp:GridView>
<asp:SqlDataSource
    id="sqltest"
    ConnectionString="<%$ ConnectionStrings:connone %>"
    SelectCommand="SELECT * FROM [test];
    InsertCommand="INSERT INTO [test] datetime,col1,col2,col3 VALUES @datetime,@col1,@col2,@col3;">        
</asp:SqlDataSource>

为简洁起见,省略了包含gridview数据的文本框。

2 个答案:

答案 0 :(得分:0)

您需要使用已知的命令名称,例如Insert。它不会知道您的自定义命令名称。

阅读本文: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.buttonfield.commandname(v=vs.110).aspx

变化:

<asp:Button ID="btnins" CommandName="insertinto" runat="server" Text="Insert Into" OnClick="btnins_Click" />

为:

<asp:Button ID="btnins" CommandName="Insert" runat="server" Text="Insert Into" OnClick="btnins_Click" />

答案 1 :(得分:0)

GridView行命令事件来自数据行上的Command控件。

您在GridView标题中放置了一个按钮,您需要处理btnins.Command事件