当我从gridview插入时,将空行插入sql表

时间:2015-02-25 17:56:06

标签: c# asp.net gridview

插入

  • 将所有字段转换为模板字段
  • 为网格启用了页脚
  • 在页脚模板中添加了文本框

enter image description here

这是代码aspx.cs

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        SqlDataSource1.Insert();           
    }

这是插入命令

的.aspx代码
 InsertCommand="INSERT INTO [Net Weight Tracking] (Date, [Unit UPC Base Item], [Item (Optional)], [Preset Number], [Product Group], Shift, [Rotation Code], BBD, [Operator Name], Supervisor, [Production Line], [Bagger Number], [Start Time], [Stop Time], [Under Counts], [Label Wt on Pkg (g)], [Machine Tare Wt (g)], [Actual Tare Wt (g)], [Verify Target Wt (g)], [Total Count (Proper)], [Mean Gross (g)], [Rptd Mean Net (g)], [Std Dev (g)], [Max (g)], [Min (g)], [TNE (g)], Comments, Field1, Field2, Field3) VALUES (@date, @unit, @item, @preset, @prodgroup, @shift, @rotationcode, @bbd, @operatorname, @supervisorname, @productionline, @baggernumber, @starttime, @stoptime, @undercount, @labelwt, @machine, @actual, @verify, @totalcount, @meangross, @rptd, @std, @mx, @min, @tne, @comments, @field, @field2, @field3)" 
<InsertParameters>
            <asp:Parameter Name="Date" />
            <asp:Parameter Name="UnitUPCBaseItem" />
            <asp:Parameter Name="Item" />
            <asp:Parameter Name="Preset" />
            <asp:Parameter Name="Product" />
            <asp:Parameter Name="Shift" />
            <asp:Parameter Name="Rotation" />
            <asp:Parameter Name="BBD" />
            <asp:Parameter Name="Operator" />
            <asp:Parameter Name="Supervisor" />
            <asp:Parameter Name="Production" />
            <asp:Parameter Name="Bagger" />
            <asp:Parameter Name="Start" />
            <asp:Parameter Name="Stop" />
            <asp:Parameter Name="Under" />
            <asp:Parameter Name="Label" />
            <asp:Parameter Name="Machine" />
            <asp:Parameter Name="Actual" />
            <asp:Parameter Name="Verify" />
            <asp:Parameter Name="Total" />
            <asp:Parameter Name="Mean" />
            <asp:Parameter Name="Rptd" />
            <asp:Parameter Name="Std" />
            <asp:Parameter Name="Max" />
            <asp:Parameter Name="Min" />
            <asp:Parameter Name="TNE" />
            <asp:Parameter Name="Comments" />
            <asp:Parameter Name="Field1" />
            <asp:Parameter Name="Field2" />
            <asp:Parameter Name="Field3" />
            <asp:Parameter Name="date" />
            <asp:Parameter Name="unit" />
            <asp:Parameter Name="item" />
            <asp:Parameter Name="preset" />
            <asp:Parameter Name="prodgroup" />
            <asp:Parameter Name="shift" />
            <asp:Parameter Name="rotationcode" />
            <asp:Parameter Name="bbd" />
            <asp:Parameter Name="operatorname" />
            <asp:Parameter Name="supervisorname" />
            <asp:Parameter Name="productionline" />
            <asp:Parameter Name="baggernumber" />
            <asp:Parameter Name="starttime" />
            <asp:Parameter Name="stoptime" />
            <asp:Parameter Name="undercount" />
            <asp:Parameter Name="labelwt" />
            <asp:Parameter Name="machine" />
            <asp:Parameter Name="actual" />
            <asp:Parameter Name="verify" />
            <asp:Parameter Name="totalcount" />
            <asp:Parameter Name="meangross" />
            <asp:Parameter Name="rptd" />
            <asp:Parameter Name="std" />
            <asp:Parameter Name="mx" />
            <asp:Parameter Name="min" />
            <asp:Parameter Name="tne" />
            <asp:Parameter Name="comments" />
            <asp:Parameter Name="field" />
            <asp:Parameter Name="field2" />
            <asp:Parameter Name="field3" />
        </InsertParameters>

我输入所有数据并单击插入,它在我的sql表中插入一个空行,包含所有空值,我希望数据插入数据库并反映在网格上

我认为gridview没有得到值,所以我在插件上尝试这个仍然无效:

 <InsertParameters>
                 <asp:FormParameter FormField="TextBox31" Name="Date" Type="DateTime" />
            <asp:FormParameter FormField="TextBox32" Name="Unit_UPC_Base_Item" 
                Type="String" />
            <asp:FormParameter FormField="TextBox33" Name="column1" Type="String" />

            <asp:FormParameter FormField="TextBox35" Name="Product_Group" Type="String" />
            <asp:FormParameter FormField="TextBox36" Name="Shift" Type="String" />
            <asp:FormParameter FormField="TextBox37" Name="Rotation_Code" Type="String" />
            <asp:FormParameter FormField="TextBox38" Name="BBD" Type="String" />
            <asp:FormParameter FormField="TextBox39" Name="Operator_Name" Type="String" />
            <asp:FormParameter FormField="TextBox40" Name="Supervisor" Type="String" />
            <asp:FormParameter FormField="TextBox41" Name="Production_Line" Type="String" />
            <asp:FormParameter FormField="TextBox42" Name="Bagger_Number" Type="Double" />
            <asp:FormParameter FormField="TextBox43" Name="Start_Time" Type="DateTime" />
            <asp:FormParameter FormField="TextBox44" Name="Stop_Time" Type="DateTime" />
            <asp:FormParameter FormField="TextBox45" Name="Under_Counts" Type="Double" />
            <asp:FormParameter FormField="TextBox46" Name="column2" Type="Double" />
            <asp:FormParameter FormField="TextBox47" Name="column3" Type="Double" />
            <asp:FormParameter FormField="TextBox48" Name="column4" Type="Double" />
            <asp:FormParameter FormField="TextBox49" Name="column5" Type="Double" />
            <asp:FormParameter FormField="TextBox50" Name="column6" Type="Double" />
            <asp:FormParameter FormField="TextBox51" Name="column7" Type="Double" />
            <asp:FormParameter FormField="TextBox52" Name="column8" Type="Double" />
            <asp:FormParameter FormField="TextBox53" Name="column9" Type="Double" />
            <asp:FormParameter FormField="TextBox54" Name="column10" Type="Double" />
            <asp:FormParameter FormField="TextBox55" Name="column11" Type="Double" />
            <asp:FormParameter FormField="TextBox56" Name="column12" Type="Double" />
            <asp:FormParameter FormField="TextBox57" Name="Comments" Type="String" />
            <asp:FormParameter FormField="TextBox58" Name="Field1" Type="DateTime" />
            <asp:FormParameter FormField="TextBox59" Name="Field2" Type="DateTime" />
            <asp:FormParameter FormField="TextBox60" Name="Field3" Type="String" />
            <asp:FormParameter FormField="TextBox34" Name="Preset_Number" />
</InsertParameters>

我有rowcommand事件,我想点击gridview上的按钮会触发此事件,但确实没有获取值。 enter image description here

PlZ帮助

解决方案已实施但未运行:

if (e.CommandName == "InsertRow")
            {
                SqlDataSource1.InsertParameters["Date"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox31")).Text;
                SqlDataSource1.InsertParameters["Unit_UPC_Base_Item"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox32")).Text;
                SqlDataSource1.InsertParameters["column1"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox33")).Text;
                SqlDataSource1.InsertParameters["Preset_Number"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox34")).Text;
                SqlDataSource1.InsertParameters["Product_Group"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox35")).Text;
                SqlDataSource1.InsertParameters["Shift"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox36")).Text;
                SqlDataSource1.InsertParameters["Rotation_Code"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox37")).Text;
                SqlDataSource1.InsertParameters["BBD"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox38")).Text;
                SqlDataSource1.InsertParameters["Operator_Name"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox39")).Text;
                SqlDataSource1.InsertParameters["Supervisor"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox40")).Text;
                SqlDataSource1.InsertParameters["Production_Line"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox41")).Text;
                SqlDataSource1.InsertParameters["Bagger_Number"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox42")).Text;
                SqlDataSource1.InsertParameters["Start_Time"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox43")).Text;
                SqlDataSource1.InsertParameters["Stop_Time"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox44")).Text;
                SqlDataSource1.InsertParameters["Under_Counts"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox45")).Text;
                SqlDataSource1.InsertParameters["column2"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox46")).Text;
                SqlDataSource1.InsertParameters["column3"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox47")).Text;
                SqlDataSource1.InsertParameters["column4"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox48")).Text;
                SqlDataSource1.InsertParameters["column5"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox49")).Text;
                SqlDataSource1.InsertParameters["column6"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox50")).Text;
                SqlDataSource1.InsertParameters["column7"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox51")).Text;
                SqlDataSource1.InsertParameters["column8"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox52")).Text;
                SqlDataSource1.InsertParameters["column9"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox53")).Text;
                SqlDataSource1.InsertParameters["column10"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox54")).Text;
                SqlDataSource1.InsertParameters["column11"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox55")).Text;
                SqlDataSource1.InsertParameters["column12"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox56")).Text;
                SqlDataSource1.InsertParameters["Comments"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox57")).Text;
                SqlDataSource1.InsertParameters["Field1"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox58")).Text;
                SqlDataSource1.InsertParameters["Field2"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox59")).Text;
                SqlDataSource1.InsertParameters["Field3"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TextBox60")).Text;

                SqlDataSource1.Insert();

            }

正如你所说,我使用简单的参数

  <InsertParameters>
                <asp:Parameter Name="Date" Type="DateTime" />
                <asp:Parameter Name="Unit_UPC_Base_Item" Type="String" />
                <asp:Parameter Name="column1" Type="String" />
                <asp:Parameter Name="Product_Group" Type="String" />
                <asp:Parameter Name="Shift" Type="String" />
                <asp:Parameter Name="Rotation_Code" Type="String" />
                <asp:Parameter Name="BBD" Type="String" />
                <asp:Parameter Name="Operator_Name" Type="String" />
                <asp:Parameter Name="Supervisor" Type="String" />
                <asp:Parameter Name="Production_Line" Type="String" />
                <asp:Parameter Name="Bagger_Number" Type="Double" />
                <asp:Parameter Name="Start_Time" Type="DateTime" />
                <asp:Parameter Name="Stop_Time" Type="DateTime" />
                <asp:Parameter Name="Under_Counts" Type="Double" />
                <asp:Parameter Name="column2" Type="Double" />
                <asp:Parameter Name="column3" Type="Double" />
                <asp:Parameter Name="column4" Type="Double" />
                <asp:Parameter Name="column5" Type="Double" />
                <asp:Parameter Name="column6" Type="Double" />
                <asp:Parameter Name="column7" Type="Double" />
                <asp:Parameter Name="column8" Type="Double" />
                <asp:Parameter Name="column9" Type="Double" />
                <asp:Parameter Name="column10" Type="Double" />
                <asp:Parameter Name="column11" Type="Double" />
                <asp:Parameter Name="column12" Type="Double" />
                <asp:Parameter Name="Comments" Type="String" />
                <asp:Parameter Name="Field1" Type="DateTime" />
                <asp:Parameter Name="Field2" Type="DateTime" />
                <asp:Parameter Name="Field3" Type="String" />
                <asp:Parameter Name="Preset_Number" />
            </InsertParameters>

1 个答案:

答案 0 :(得分:1)

那些不是FormParameters,它们是GridView字段,无法通过这样的表单访问。如果它们是Gridview控件中的ControlParameters。但是你没有做标准的插入,所以实现上述目标的最简单方法是“

  1. 如上所示,在插入参数框中,将所有表单参数更改为普通旧Parameters
  2. 确保您的添加按钮具有CommandName,如“MyInsert”而不是“插入”,单词“插入”保留用于标准网格视图操作,并从页脚提取数据,虽然常见,但不是标准。 / LI>
  3. RowCommand事件中,请确保在调用e函数之前对e.CommandName="MyInsert"的{​​{1}}参数进行检查。
  4. 在致电SqlDataSource1.Insert()之前,您必须将所有字段分配到Insert()集合,如下所示:

  5. VB代码,但转换应该是一件简单的事情

    SqlDataSource1.InsertParameters

    1. 在大多数情况下,类型转换是隐式的,但您可能需要显式转换某些文本值。
    2. 我认为就是这样 - 如果我错过任何事情让我知道,我会更新帖子


      更新2015/03 / 02~16:31

      何时检查Private Sub GridView1_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GridView1.RowCommand If e.CommandName = "MyInsert" Then SqlDataSource1.InsertParameters("Date").DefaultValue = foo("TextBox31") SqlDataSource1.InsertParameters("Unit_UPC_Base_Item").DefaultValue = foo("TextBox32") SqlDataSource1.InsertParameters("column1").DefaultValue = foo("TextBox33") . . (yada yada yada) . SqlDataSource1.Insert() End If End Sub ' Helper function Private Function foo( ControlID As String) As String ' add error checking Return CType(GridView1.FooterRow.FindControl(ControlID), TextBox).Text End Function 事件

      当您使用Gridview上下文菜单并“启用选择”时,VisualStudio会将CommandField插入到字段列表的顶部。使用对话框编辑列时,可以看到命令字段中可用的所有选项。其中包括:“插入”,“选择”,“删除”,“取消”等......这些都与标准的GridView操作一致。如果为删除命令提供了具有sql或存储过程的RowCommand,则删除选项将可用,如果为Insert提供sql或存储过程,则同样可以使用Insert

      每个操作的AutoGenerated CommandName是“Select $ N”,“Delete $ N”等,其中N是SqlDataSource命令按钮中的行号。每个事件都有自己的事件处理程序,其名称为“RowSelecting”,“RowSelected”,“RowDeleting”,“RowDeleted”等。

      除了引发这些事件之外,gridview还将这些标准事件“冒泡”到RowCommand事件处理程序。

      现在您必须了解有关gridview的一件事,这直接来自Microsoft:

        

      不直接支持将记录插入数据源   GridView控件。但是,可以通过插入记录   将GridView控件与DetailsView或。一起使用   FormView控件。有关更多信息,请参阅DetailsView或FormView,   分别

      那应该告诉你一些事情。这是违反直觉的,因为如果你在Gidview中查看CommandField,你可以清楚地看到插入命令。使用带有一系列文本框的页脚行通常是如何为GridView控件快速插入行插入。

      请记住,所有命令都会通过RowCommand传递,即使它们有自己的处理程序(选择,取消,删除等),我们通常也不会在那里查找它们。

      那么,你什么时候检查RowCommand.CommandName?无论何时尝试处理Gridview不支持的事件,都要检查。

      如果要在不使用GridView插入命令的情况下进行插入,首先要禁用CommandField中的Insert。它将可用,因为已连接的GridView已定义了插入命令。

      您将CommandField转换为TemplateField并编辑模板并向FooterTemplate添加一个Button:

      SqlDataSource

      现在,您需要验证某些内容。

      如果上面定义的按钮正在触发CommandName为“Insert”的CommandEvent,那么你要么启用了Insert(你不应该),要么你的自定义CommandName以“插入”这个词为开头错误触发Insert事件。

      如果你还记得GridView呈现的任何标准命令都是“Select $ 3”。这将使用CommandName =“Select”触发选择/选定事件和气泡到RowCommand。

      我认为您创建的按钮会导致插入事件被触发。我错了,但值得检查。在任何情况下,我都会尝试将CommandName更改为以保留字以外的其他内容开头。