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值 与预期相反,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提供数据的方法获取)