簡體   English   中英

gridview鏈接按鈕CommandArgument值未更改

[英]gridview linkbutton CommandArgument value not changing

我有一個帶有數據列表的網格視圖和一個用於刪除該行的LinkBut​​ton。

<asp:GridView ID="gridApartment" EmptyDataText="No Records Found" runat="server" AutoGenerateColumns="False" BorderWidth="0"
                            AllowPaging="true" ShowFooter="false" PageSize="15" Width="100%" OnPageIndexChanging="gridApartment_PageIndexChanging"
                            CssClass="mGrid"
                            OnRowDeleting="gridApartment_RowDeleting" OnRowCommand="gridApartment_RowCommand">
                            <AlternatingRowStyle CssClass="alt" />
                            <PagerStyle CssClass="pgr" />
                            <Columns>
                                <asp:TemplateField HeaderText="Building">
                                    <ItemTemplate>
                                        <asp:Label ID="BuildingName" runat="server" Text='<%#Eval("BuildingName") %>'></asp:Label>
                                    </ItemTemplate>
                                    <HeaderStyle Width="25%"></HeaderStyle>
                                </asp:TemplateField>


                                <asp:TemplateField>
                                    <ItemTemplate>
                                        <asp:LinkButton ID="lnkDelete" CssClass="aDelete" ToolTip="Delete" runat="server" CommandName="delete" OnClientClick=' javascript:return confirm("Are you sure you want to delete?"); '
                                            CommandArgument='<%# Eval("RoomDetailsId") %>'>Delete</asp:LinkButton>
                                    </ItemTemplate>
                                    <HeaderStyle Width="8%"></HeaderStyle>
                                </asp:TemplateField>

                            </Columns>

                        </asp:GridView>

此代碼填充的加載數據

gridApartment.DataSource = masterManager.GetAllRooms();
gridApartment.DataBind();

現在我有一個搜索框,當我搜索時,過濾器結果將被此代碼綁定。

gridApartment.DataSource = conobj.GetSearchDetails("usp_RoomDetailsSearch", "@SearchName", txtSearchterm.Text.Trim());
gridApartment.DataBind();

用於刪除的代碼是

protected void gridApartment_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
    {
        if (e.CommandName == "delete")
        {
            var masterManager = new MasterEntryManager();

            int res = masterManager.DeletRoom(e.CommandArgument.ToString());

            Search();
        }
    }

第一次加載網格時,e.CommandArgument具有正確的ID,我可以刪除正確的行。 但是,當我搜索並重新綁定gridview時,不會使用新ID更新e.CommandArgument值。 它仍然返回與頁面加載時首先加載的ID相同的ID。

例如:

  1. 當第一次加載網格時,當我嘗試刪除第一行時,e.CommandArgument的ID為1001,我刪除了ID為1001的記錄。
  2. 現在,我第二次加載gridview。 現在,第一行鏈接按鈕e.CommandArgument的ID為1500。
  3. 我執行搜索,結果網格只有5行
  4. 現在我嘗試刪除第一行,預期的鏈接按鈕e.CommandArgument ID為2001,但我將鏈接按鈕e.CommandArgument ID設置為1500,即第一次加載gridview時第一行ID的值

ID未更新。 如何獲取更新的e.CommandArgument值。

與期望相反,CommandArgument不與執行回發的控件關聯。 而是,DataSource作為ViewState的一部分返回,並且CommandArgument由控件的索引引用。 如果GridView或DataSource發生更改,則索引將不再正確。

您需要確保GridView和DataSource在引用CommandArgument之前沒有更新,但是在刪除之后又更新了(看起來就像您擁有此部分一樣)。 請記住,回發事件在頁面加載后發生。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        gridApartment.DataSource = masterManager.GetAllRooms();
        gridApartment.DataBind();
    }
}

暫無
暫無

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

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