【问题标题】:Execute an "INSERT INTO" in the HeaderRow using RowCommand使用 RowCommand 在 HeaderRow 中执行“INSERT INTO”
【发布时间】:2014-04-03 04:48:23
【问题描述】:

我正在尝试在 HeaderRow 中执行“INSERT INTO”。

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 数据的文本框。

【问题讨论】:

    标签: asp.net gridview insert-into


    【解决方案1】:

    您需要使用已知的命令名称,例如 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" />
    

    【讨论】:

    • 这并不完全正确。所有“已知”命令也通过 RowCommand 事件传递,只是它们是“众所周知的”并且具有与之关联的标准事件。
    【解决方案2】:

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

    你在GridView头部放置了一个按钮,你需要处理btnins.Command事件

    【讨论】:

      猜你喜欢
      • 2019-04-30
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 2014-07-31
      相关资源
      最近更新 更多