2016-04-07 10 views
1

LINQデータソースを使用しているGridViewがあります。私のPage_Loadで、私はASP.NET GridViewのボタンで「インデックスが範囲外です」エラー

Using rah As New LinqDataContext(LinqConnectionString) 
       GridView1.DataSource = From l In rah.Links _ 
             Where l.CategoryID = CategoryDropDown.SelectedValue _ 
             Order By l.Name _ 
             Select l.LinkID, _ 
             l.Name, _ 
             l.URL, _ 
             l.Comment, _ 
             l.QuickLink 

       GridView1.DataBind() 

End Using 

をやっているこれまでのところ、正常に動作しているように見えます、と私はページを実行したときにGridViewに現れてレコードを表示することができます。

のGridViewの各行は、最後の列の削除]ボタンがあります。

<asp:ButtonField ButtonType="Button" CommandName="del" Text="Delete Link" /> 

(私もASPを試してみました:TemplateFieldとItemTemplateにあるボタン)を

私の問題はボタンであり、それは、イベントハンドラ内のコードの最初の行に失敗し、クリックされた:

Private Sub GridView1_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GridView1.RowCommand 

Dim ID As String = GridView1.DataKeys(e.CommandArgument).Value.ToString 

エラーはインデックスが範囲外だった」である非負とcollecのサイズよりも小さくなければなりません。何らかの理由で行インデックスを適切に渡していません。次のように

私のGridViewのコードは次のとおりです。

<asp:GridView CssClass="Grid" ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="LinkID" CellPadding="5"> 

    <Columns> 

    <asp:TemplateField HeaderText="Name"> 
     <ItemTemplate> 
      <asp:Label ID="lblName" runat="server" Text='<%#: Bind("Name")%>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 

    <asp:TemplateField HeaderText="URL"> 
     <ItemTemplate> 
      <asp:HyperLink ID="hyperURL" runat="server" Text='<%#: Bind("URL")%>' NavigateUrl='<%# "../GoToURL.aspx?url=" & Server.UrlEncode(Eval("URL"))%>'></asp:HyperLink> 
     </ItemTemplate> 

    </asp:TemplateField> 

    <asp:TemplateField HeaderText="Comment"> 
     <ItemTemplate> 
      <asp:Label ID="lblComment" runat="server" Text='<%#: Bind("Comment")%>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 

     <asp:TemplateField HeaderText="Quick Link"> 
     <ItemTemplate> 
      <asp:Label ID="lblQuickLink" runat="server" Text='<%# Bind("QuickLink")%>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 

     <asp:ButtonField ButtonType="Button" CommandName="del" Text="Delete Link" /> 


    </Columns> 

</asp:GridView> 

ヘルプは感謝します!

+0

おそらく、_gridViewCommandEventArgs_ rightを意味しますか? – Steve

+0

はい、申し訳ありませんが、私がここに投稿したときの間違いでした。 "e AS GridView ..."と言わなければなりません。 – user3173098

+0

私が掲示したときには、それはタイプミスでした。私はまだ私の実際の問題を解決していません – user3173098

答えて

0

ButtonFieldにはCommandArgumentプロパティセットがありません。そのため、CommandArgumentは空でもnullでも、そのコレクションには含まれません。私はDataKeysが(配列のように)整数を必要とし、コマンド引数は文字列であり、型変換エラーも発生する可能性があると思いますか?

+0

こんにちは。私はCommandArgument = '<%#Eval( "LinkID")%>'を使ってみましたが、Visual Studio 2013を使ってみました。 ButtonFieldの有効な属性ではないことを教えてください – user3173098

+0

TemplateFieldをテンプレートで使用すると、CommandArgumentプロパティへのバインディングを使用して動作するはずです。 –

0

回答をいただきありがとうございますが、問題を把握しました。私がここに投稿していなかったのはコードだった。この質問は好きなだけ削除できます。

関連する問題