2011-05-04 164 views
0

我想從rowdataBound()事件的gridview中刪除一行,但得到過程或函數delete_row指定的參數太多。 下面是代碼從gridview刪除一行

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if ((e.Row != null) && (e.Row.RowType == DataControlRowType.DataRow)) 
    { 
     for (int i = 0; i < GridView1.Rows.Count; i++) 
     { 
      GridView1.Rows[i].Attributes["style"] += "cursor: pointer; cursor: hand;"; 
      if (GridView1.DataKeys[i].Values[1].ToString() != "broken") 
       GridView1.Rows[i].Attributes["onclick"] = 
        "window.open('" + GridView1.DataKeys[i].Values[0].ToString() + "','open_window', 'menubar, toolbar, location, directories, status, scrollbars, resizable, dependent, width=640, height=480, left=0, top=0')"; 
      else 
      { 
       GridView1.DeleteRow(i); 
      } 

     } 

    } 

HTML標記是下面,我宣佈3周的DataKeyNames是,這個問題

<asp:HiddenField ID="hiddenField1" runat="server" Value="" /> 

     <br /> 

     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:User42ConnectionString %>" 
      SelectCommand="lsp_show_by_letter" onselecting="SqlDataSource1_Selecting" 
      SelectCommandType="StoredProcedure" DeleteCommand="delete_row" 
      DeleteCommandType="StoredProcedure"> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="hiddenField1" DefaultValue=" " 
        Name="letter" PropertyName="Value" Type="String" /> 
      </SelectParameters> 
      <DeleteParameters> 
       <asp:ControlParameter Name="link_Id" ControlID="hiddenField1" PropertyName="Value" Type="Int32" /> 
      </DeleteParameters> 
     </asp:SqlDataSource> 

    </div> 

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
     AllowSorting="True" AutoGenerateColumns="False" 
     DataSourceID="SqlDataSource1" onrowdatabound="GridView1_RowDataBound" 
     DataKeyNames="link_url,link_description,link_id"> 
     <Columns> 
      <asp:BoundField DataField="link_display_string" 
       HeaderText="link_display_string" SortExpression="link_display_string" /> 
      <asp:BoundField DataField="link_url"Visible="False" /> 
      <asp:BoundField DataField="link_description" Visible="False" /> 
      <asp:BoundField DataField="link_id" ReadOnly="true" Visible="False" /> 
     </Columns> 
    </asp:GridView> 

刪除行存儲過程是

`ALTER PROCEDURE dbo.delete_row @link_Id int AS BEGIN DELETE FROM [links] WHERE ([link_id] = @link_Id) END` 
+0

什麼需要解決? – 2011-05-04 23:18:58

+0

過程或函數delete_row指定的參數太多。 – nikhil 2011-05-04 23:24:24

+0

deleterow函數是什麼樣的? – JonH 2011-05-04 23:27:28

回答

2

這是因爲你的hiddenfiled不綁定到SqlDataSource,因此它將空或空值傳遞給delete_row過程。由於您將SQLDataSource直接綁定到datagridview,因此需要使用datagridview的選定行值綁定hideenfiled。這應該可以幫助您嘗試幾個選項,但這是您的基本問題。