以下是从网格视图中删除行并从而更新内容列表的代码。但它使Index超出范围异常。
Grid视图的设计器代码就在这里。
<asp:GridView ID="GridViewD" runat="server" AlternatingRowStyle-BackColor="RoyalBlue" CssClass="Grid" AutoGenerateColumns="false" OnRowCancelingEdit="Cancel_Edit" OnRowDeleting="GridViewD_RowDeleting" OnRowEditing="Edit_Row" OnRowUpdating="Update_Row">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" />
<asp:BoundField DataField="Title" HeaderText="Title" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:BoundField DataField="Cellphone" HeaderText="Contact" />
<asp:CommandField ShowEditButton="true" />
<asp:CommandField ShowDeleteButton="true" />
</Columns>
</asp:GridView>
<asp:Label ID="lbldata" runat="server" Text=""></asp:Label>
这是背后的代码。
protected void GridViewD_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
try
{
GridViewRow row = GridViewD.Rows[e.RowIndex];
string itemId;
itemId = ((TextBox)row.Cells[0].Controls[0]).Text;
// itemId = GridViewD.DataKeys[e.RowIndex].Value.ToString();
DeleteRow(itemId);
Bind_Data();
}
catch (Exception ex)
{
}
}
private void DeleteRow(string itemId)
{
using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists.TryGetList("Advertisement");
SPListItem item = null;
item = list.GetItemById(int.Parse(itemId));
web.AllowUnsafeUpdates = true;
item.Delete();
list.Update();
web.AllowUnsafeUpdates = false;
}
}
}
索引超出范围异常。
如何解决?
答案 0 :(得分:2)
我认为您的itemId
获得了null
个号码。请放置断点并检查itemId
是否获得正确的值。
您可以尝试将模板更改为项目模板,并使用以下方法获取值。
GridViewRow row = GridViewD.Rows[e.RowIndex];
Label itemIdLabel = (Label)row.FindControl("YourLabelNameitemtemp");
string itemId = itemIdLabel.Text;
希望这有帮助。