【发布时间】:2015-01-15 10:08:05
【问题描述】:
我有一个带有数据列表的网格视图和一个用于删除行的 LinkButton。
<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 时,e.CommandArgument 值不会用新 ID 更新。它仍然返回在页面加载时首先加载的相同 ID。
例如:
- 首次加载网格时,当我尝试删除第一行时,e.CommandArgument 的 ID 为 1001,我删除了 ID 为 1001 的记录。
- 现在我第二次加载gridview。现在第一行链接按钮 e.CommandArgument 的 ID 为 1500。
- 我执行搜索,结果网格只有 5 行
- 现在我尝试删除第一行,预期的链接按钮 e.CommandArgument ID 为 2001,但我得到的链接按钮 e.CommandArgument ID 为 1500,即首次加载 gridview 时第一行 ID 的值
ID 未更新。 如何获取更新后的 e.CommandArgument 值。?
【问题讨论】:
-
当您使用
LinkButton时,请尝试使用OnClick事件而不是CommandName,在OnClick事件中尝试此(sender as LinkButton).CommandArgument -
我编写了 OnClick 事件。但是在搜索并重新填充 gridview 后,ID 值没有得到更新。
-
然后检查您是否通过视图源或调试器窗口在
CommandArument中获得正确的ID。 -
没有。我在 CommandArument 中没有得到正确的 ID。搜索后 CommandArument 的值未得到更新。该值与第一次加载网格时分配的值相同。
-
您可能是从您的
DataSource获得的,您可能需要检查您从DataBase返回的数据(从向 GridView 提供数据的方法)