2014-09-01 66 views
0

我正在尝试使用Gridview完成SQL“INSERT INTO”命令。使用Gridview完成SQL“INSERT INTO”命令并

我使用FindControl捕获到页脚文本框: TextBox Tempcol1 = ((TextBox)GridView1.FooterRow.FindControl("TBInsertFootercol1"));

然后将其绑定到InsertParameterSqlDataSource1

SqlDataSource1.InsertParameters["@col1"].DefaultValue = Tempcol1.Text; 

然后将其发送给SqlDataSource1

SqlDataSource1.Insert(); 

aspx

<asp:GridView ID="GridView1" 
    runat="server" 
    DataSourceID="SqlDataSource1" 
    AutoGenerateColumns="false" 
    DataKeyNames="idt" 
    showfooter="true"> 
    <Columns> 
     <asp:BoundField DataField="idt" HeaderText="idt" Readonly="true" SortExpression="idt" /> 
     <asp:BoundField DataField="datetime" HeaderText="datetime" SortExpression="datetime" /> 
     <asp:TemplateField SortExpression="col1" HeaderText="col1"> 
       <ItemTemplate> 
        <asp:TextBox ID="txt1" runat="server" Text='<%# Bind("col1") %>' /> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:textbox id="col1TextBox" text='<%#Bind("col1")%>' runat="server" /> 
       </EditItemTemplate> 
      <FooterTemplate> 
       <asp:TextBox ID="TBInsertFootercol1" runat="server"></asp:TextBox> 
      </FooterTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField SortExpression="col2" HeaderText="col2"> 
       <ItemTemplate> 
        <asp:TextBox ID="txt2" runat="server" Text='<%# Bind("col2") %>' /> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:textbox id="col2TextBox" text='<%#Bind("col2")%>' runat="server" /> 
       </EditItemTemplate> 
      <FooterTemplate> 
       <asp:TextBox ID="TBInsertFootercol2" runat="server"></asp:TextBox> 
      </FooterTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField SortExpression="col3" HeaderText="col3"> 
       <ItemTemplate> 
        <asp:TextBox ID="txt3" runat="server" Text='<%# Bind("col3") %>' /> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:textbox id="col3TextBox" text='<%#Bind("col3")%>' runat="server" /> 
       </EditItemTemplate> 
      <FooterTemplate> 
       <asp:TextBox ID="TBInsertFootercol3" runat="server"></asp:TextBox> 
      </FooterTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Row Total"> 
       <ItemTemplate> 
        <asp:TextBox ID="txtrowtot" BackColor="LightGreen" runat="server" /> 
       </ItemTemplate> 
      <FooterTemplate> 
       <asp:Button ID="btn_InsertInto" runat="server" Text="Insert Into" /> 
      </FooterTemplate> 
     </asp:TemplateField> 
    </Columns> </asp:GridView> 
<asp:SqlDataSource 
    id="SqlDataSource1" 
    ConnectionString="<%$ ConnectionStrings:Total %>" 
    SelectCommand="SELECT * FROM [test];" 
    InsertCommand="INSERT INTO [test] [datetime], [col1], [col2], [col3] VALUES @datetime, @col1, @col2, @col3;" 
    runat="server"> 
    <InsertParameters> 
     <asp:Parameter Name="datetime" Type="String" /> 
     <asp:Parameter Name="col1" Type="Int32" /> 
     <asp:Parameter Name="col2" Type="Int32" /> 
     <asp:Parameter Name="col3" Type="Int32" /> 
    </InsertParameters> 
</asp:SqlDataSource> 

aspx.cs

public void btn_InsertInto(object sender, EventArgs e) 
    { 
     TextBox Tempcol1 = ((TextBox)GridView1.FooterRow.FindControl("TBInsertFootercol1")); 
     TextBox Tempcol2 = ((TextBox)GridView1.FooterRow.FindControl("TBInsertFootercol2")); 
     TextBox Tempcol3 = ((TextBox)GridView1.FooterRow.FindControl("TBInsertFootercol3")); 
     SqlDataSource1.InsertParameters["@datetime"].DefaultValue = Convert.ToString(DateTime.Now); 
     SqlDataSource1.InsertParameters["@col1"].DefaultValue = Tempcol1.Text; 
     SqlDataSource1.InsertParameters["@col2"].DefaultValue = Tempcol2.Text; 
     SqlDataSource1.InsertParameters["@col3"].DefaultValue = Tempcol3.Text; 
     SqlDataSource1.Insert(); 
     GridView1.DataBind(); 
    } 
+0

,问题是... – Dalorzo 2014-09-01 02:42:31

+0

的 '@' 为什么它什么也不做。它不会插入到我添加的值的另一行中。根本没有错误陈述。 – noviscientia 2014-09-01 02:44:54

+0

调试你的代码,在'SqlDataSource1.Insert();'处放置断点,并且在每次检查'SqlDataSource1.InsertParameters'的值时,看看它们是否有价值,然后告诉我们,祝你好运 – Farrokh 2014-09-01 04:17:53

回答

0

尝试下探从InsertParamters声明

SqlDataSource1.InsertParameters["datetime"].DefaultValue = Convert.ToString(DateTime.Now); 
SqlDataSource1.InsertParameters["col1"].DefaultValue = Tempcol1.Text; 
SqlDataSource1.InsertParameters["col2"].DefaultValue = Tempcol2.Text; 
SqlDataSource1.InsertParameters["col3"].DefaultValue = Tempcol3.Text;