asp.net - 指数超出范围。必须是非负数且小于集合的大小。参数名称:VB.Net中的索引
问题描述
我有一个 GridView,它已经填充了一个选择按钮来查看所选项目。
但是,一旦调用该方法,我就会收到以下消息,我似乎可以弄清楚
System.ArgumentOutOfRangeException: '索引超出范围。必须是非负数且小于集合的大小。
这假设Dim cusName As String = Report.SelectedRow.Cells(0).Text
在索引 0中选择
这是我的桌子的样本
<div class="row">
<div class="col-lg-12 col-md-12 col-xs-12">
<cc1:TabContainer ID="TabContainer1" CssClass="Tab" runat="server" ActiveTabIndex="0" Width="100%">
<cc1:TabPanel ID="tsaTabPanel" runat="server" HeaderText="Report" EnableViewState="False">
<ContentTemplate>
<div>
<asp:GridView CssClass="table table-bordered table-striped" ID="RCReport" runat="server" AutoGenerateColumns="False" AllowPaging="True" OnPageIndexChanging="OnPageIndexChanging" PageSize="100" OnSelectedIndexChanged="OnSelectedIndexChanged">
<Columns>
<asp:BoundField DataField="id" HeaderText="Id" SortExpression="id"></asp:BoundField>
<asp:BoundField DataField="customerName" HeaderText="Customer Name" SortExpression="customerName" ></asp:BoundField>
<asp:BoundField DataField="customerEmail" HeaderText="Email" SortExpression="customerEmail"></asp:BoundField>
<asp:BoundField DataField="fee" HeaderText="Fee" SortExpression="fee"></asp:BoundField>
<asp:ButtonField Text="Select" CommandName="Select" ItemStyle-Width="150" />
</Columns>
</asp:GridView>
</div>
</ContentTemplate>
</cc1:TabPanel>
</cc1:TabContainer>
</div>
</div>
背后的代码
Protected Sub OnSelectedIndexChanged(sender As Object, e As EventArgs)
Dim cusName As String = RCReport.SelectedRow.Cells(0).Text
Dim id As String = RCReport.SelectedRow.Cells(1).Text
ClientScript.RegisterStartupScript(Me.GetType(), "alert", "alert('Id: " & id & "\nCustomer Name: " & cusName + "');", True)
End Sub
解决方案
为您编写了一个快速测试,以展示您应该能够实现所需目标的两种不同方式。
前端
<form id="form1" runat="server">
<asp:GridView ID="gvTest" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="City" HeaderText="City" />
<asp:CommandField ShowSelectButton="true" SelectText="Select Me" SelectImageUrl="~/images/green.png" />
</Columns>
</asp:GridView>
</form>
代码隐藏
Imports System.Collections.Generic
Partial Class _testVBNet
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
' only setting the value once on initial load.
If Not Page.IsPostBack Then
Dim myData As New List(Of SimpleObject)
Dim obj As SimpleObject = New SimpleObject() With {.Name = "Bob", .City = "New York"}
myData.Add(obj)
Dim obj2 As SimpleObject = New SimpleObject() With {.Name = "Aaron", .City = "Denver"}
myData.Add(obj2)
Dim obj3 As SimpleObject = New SimpleObject() With {.Name = "Shawn", .City = "Seattle"}
myData.Add(obj3)
Me.gvTest.DataSource = myData
Me.gvTest.DataBind()
End If
End Sub
Protected Sub gvTest_SelectedIndexChanging(ByVal sender As Object, ByVal e As GridViewSelectEventArgs) Handles gvTest.SelectedIndexChanging
Dim row As GridViewRow = Me.gvTest.Rows(e.NewSelectedIndex)
Dim output As String = String.Format("{0} - {1}", row.Cells(0).Text, row.Cells(1).Text) ' no .Net error
End Sub
Protected Sub gvTest_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles gvTest.SelectedIndexChanged
Dim row As GridViewRow = Me.gvTest.SelectedRow
Dim output As String = String.Format("{0} - {1}", row.Cells(0).Text, row.Cells(1).Text) ' no .Net error
End Sub
Protected Class SimpleObject
Sub New()
End Sub
Public Property Name As String
Public Property City As String
End Class
End Class
一些想法:
- EnableViewState = false 可能是一个问题,但不应该是
- 通过按钮或其他事件动态绑定的数据可能需要重新绑定,但它应该在页面的生命之旅中继续存在。
推荐阅读
- r - 使用R中的“openxl”将数据添加到excel文件中的新工作表
- c# - 覆盖 AspNetCore.Identity 表中的默认索引
- android - 回到 com.android.incallui 中的活动 InCallActivity
- excel - 向下拖动到相邻行时对值或单元格引用进行硬编码
- angular-material - 从 angular5 的按钮列表中禁用垫子按钮
- laravel - 我可以通过选项数组在 if 语句中进行比较吗
- oracle - 选择数字范围不重叠的位置
- jenkins - Jenkins 管道中的列表和并行任务
- python - 如何在不创建列表的情况下调用生成器?
- jenkins - 为什么这个命令在 Jenkins 中不起作用?