2014-09-01 64 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;