2011-05-04 5 views
0

J'essaie de supprimer une ligne de gridview sur l'événement rowdataBound() mais obtenir la procédure ou la fonction delete_row a trop d'arguments spécifiés. Ci-dessous le codeSupprimer une ligne de 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); 
      } 

     } 

    } 

marque HTML up est ci-dessous, j'ai 3 DataKeyNames déclaré que le problème

<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> 

ligne Supprimer procédure stockée est

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

Et qu'est-ce qui doit être réparé? –

+0

Procédure ou fonction delete_row a trop d'arguments spécifiés. – nikhil

+0

A quoi ressemble la fonction deleterow? – JonH

Répondre

2

C'est parce que votre hiddenfiled n'est pas lié à SqlDataSource et donc il passe une valeur vide ou nulle à la procédure delete_row. Puisque vous délimitez votre SQLDataSource directement à datagridview, vous devez lier hideenfiled avec la valeur de ligne sélectionnée de datagridview. Cela devrait vous aider à essayer quelques options mais c'est votre problème de base.

Questions connexes