1

誰かが私がこのエラーを抱えているというこのコードの何が問題になっているのかを本当に教えてもらえますか?

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" />

ここに欠けているものはありますか?助けてくれてありがとう。

4

2 に答える 2

2

このエラーは、範囲外にあるコレクションの要素にアクセスしようとすると発生します (例: 9 つの要素を持つ配列の要素 10)。私はあなたが使用している言語に特に精通していませんが、以下のコードはコレクションの範囲外の値を使用しているようですgvGrid.DataKeys

int index = Int32.Parse(e.CommandArgument.ToString());
long Id = long.Parse(gvGrid.DataKeys[index][0].ToString());

if( index < count )たとえば、渡されたインデックスが最後のインデックス可能な要素よりも大きくないことを確認するなど、何らかの健全性チェックを実行する場合、例外は発生しません。

于 2012-03-12T17:52:11.367 に答える
0

完全に機能しました。代わりに次の行を使用してください

string Id = gvGrid.DataKeys[index %= gvGrid.PageSize][0].ToString();

それでは、コーディングをお楽しみください....

于 2012-03-13T07:54:02.693 に答える