簡體   English   中英

從 gridview 中刪除一行

[英]Delete a row from gridview

我正在嘗試在 rowdataBound() 事件上從 gridview 中刪除一行,但獲取過程或 function delete_row 指定了太多 arguments。 下面是代碼

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` 

這是因為您的 hiddenfiled 未綁定到 SqlDataSource,因此它將空或 null 值傳遞給 delete_row 過程。 由於您將 SQLDataSource 直接綁定到 datagridview,因此您需要將 hideenfiled 與 datagridview 的選定行值綁定。 這應該可以幫助您嘗試一些選項,但這是您的基本問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM