Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# gridview链接按钮命令参数值未更改_C#_Asp.net - Fatal编程技术网

C# gridview链接按钮命令参数值未更改

C# gridview链接按钮命令参数值未更改,c#,asp.net,C#,Asp.net,我有一个带有数据列表的网格视图和一个用于删除行的链接按钮 <asp:GridView ID="gridApartment" EmptyDataText="No Records Found" runat="server" AutoGenerateColumns="False" BorderWidth="0" AllowPaging="true" ShowFooter="false" PageSize="15" Width="100%"

我有一个带有数据列表的网格视图和一个用于删除行的链接按钮

<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 = 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时,e.CommandArgument值不会用新ID更新。它仍然返回在页面加载时首先加载的相同ID

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

  • 第一次加载网格时,当我尝试删除第一行时,e.CommandArgument的ID为1001,我删除了ID为1001的记录
  • 现在我再次加载gridview。现在,第一行linkbutton e.CommandArgument的ID为1500
  • 我执行搜索,结果网格只有5行
  • 现在我尝试删除第一行,预期的linkbutton e.CommandArgument ID为2001,但我得到的linkbutton e.CommandArgument ID为1500,这是gridview首次加载时第一行ID的值
  • Id未更新。
    如何获取更新的e.CommandArgument值

    与预期相反,CommandArgument与执行回发的控件不关联。相反,数据源作为ViewState的一部分返回,CommandArgument由控件的索引引用。如果GridView或数据源发生更改,索引将不再正确

    您需要确保GridView和DataSource在引用CommandArgument之前没有更新,而是在删除之后更新(看起来您有这个部分)。请记住,回发事件发生在页面加载之后

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

    在使用
    LinkButton
    时,请尝试使用
    OnClick
    事件而不是
    CommandName
    ,在
    OnClick
    事件中尝试此
    (发送方为LinkButton)。CommandArgument
    我编写OnClick事件。但ID值在搜索和重新填充gridview后不会得到更新。然后检查您是否在viewsource的命令中或在调试器窗口中获得正确的ID。否。我在命令里找不到正确的身份证。搜索后,CommandArment的值未更新。该值与第一次加载网格时分配的值相同。您可能从
    数据源
    获取该值,您可能需要检查从
    数据库
    获取的数据(从向GridView提供数据的方法获取)