请有人真的告诉我这段代码有什么问题,我有这个错误:
System.ArgumentOutOfRangeException was caught
Message=Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
int index = Int32.Parse(e.CommandArgument.ToString());
long Id = long.Parse(gvGrid.DataKeys[index][0].ToString());
var stuobj = ctx.stockUnits.SingleOrDefault(st => st.ID == Id);
if (stuobj != null)
this.txtStockUnit.Text = stuobj.NAME;
ViewState["Id"] = Id;
在标记(设计师来源)中,这就是我所拥有的:
<asp:GridView ID="gvGrid" runat="server"
OnPageIndexChanging = "gvGrid_PageIndexChanging" AutoGenerateColumns="False"
BackColor="White" CssClass = "mGrid" DataKeyNames ="Id,NAME"
OnRowCommand="gvGrid_RowCommand"
...<Columns>
<asp:BoundField DataField="NAME" HeaderText="STOCK UNIT NAME" HeaderStyle-CssClass="Headerhodder"
FooterStyle-CssClass="Headerhodder" ItemStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Left"
ItemStyle-VerticalAlign="Middle" />
<asp:TemplateField HeaderStyle-CssClass="Headerhodder" FooterStyle-CssClass="Headerhodder"
ItemStyle-HorizontalAlign="Center" ItemStyle-Width="50px"
ItemStyle-VerticalAlign="Middle">
<ItemTemplate>
<asp:ImageButton ID="imgEdit" runat="server" ImageUrl="~/img/pencil.png" CommandName="EditStockUnit" CommandArgument ='<%# Container.DataItemIndex %> '
AlternateText="Edit Stock Unit" ToolTip="Edit Stock unit record" CausesValidation="false" />
这里有什么遗漏?谢谢你的帮助。
答案 0 :(得分:2)
当您尝试访问其边界之外的集合的元素时(例如,9元素数组的元素10),会发生此错误。我对您使用的语言并不是特别熟悉,但下面的代码看起来使用的值可能超出了集合gvGrid.DataKeys
的范围。
int index = Int32.Parse(e.CommandArgument.ToString());
long Id = long.Parse(gvGrid.DataKeys[index][0].ToString());
如果您执行某种理智检查,例如对于传入的索引if( index < count )
,为了确保它不大于最后一个可索引元素,你不应该得到异常。
答案 1 :(得分:0)
效果很好,只需使用以下代码
string Id = gvGrid.DataKeys[index %= gvGrid.PageSize][0].ToString();
所以享受你的编码......