C# 获取数据键期间发生超出范围异常
问: 我有一个gridview,我试图删除一些记录,我将主键存储在C# 获取数据键期间发生超出范围异常,c#,.net,asp.net,linq,gridview,C#,.net,Asp.net,Linq,Gridview,问: 我有一个gridview,我试图删除一些记录,我将主键存储在DataKeyNames中 我的问题分为两部分: 1-以下代码例外,我不知道原因: protected void gv_courses_RowCommand(object sender, GridViewCommandEventArgs e) { try { int index = Convert.ToInt32(e.CommandA
DataKeyNames
中
我的问题分为两部分:
1-以下代码例外,我不知道原因:
protected void gv_courses_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
int index = Convert.ToInt32(e.CommandArgument);
ICollection keys = gv_moreCourses.DataKeys[index].Values;
//////the rest of the code.
}
catch (Exception ee)
{
string message = ee.Message;
}
}
我的aspx:
DataKeyNames="permission_code,lect_code,note_title,iscourse"
<asp:ImageButton ID="btn_Delete" runat="server" CausesValidation="False" ImageUrl="~/Images/Symbols-Delete-icon.png"
CommandArgument='<%#((GridViewRow)Container).RowIndex%>' CommandName="deleteCourse" />
DataKeyNames=“权限\代码、选择\代码、注释\标题、课程”
例外情况是:在这一行
gv_moreCourses.DataKeys[index]代码>
System.ArgumentOutOfRangeException
2-如果我解决了第一个问题,如何访问键中的每个值
。首选LINQ
int index = Convert.ToInt32(e.CommandArgument);
索引将具有所选数据键的值,就像它可以具有与0
不同的值一样,因为它需要数据键索引gv\u更多课程。数据键[DataKey]
您可以直接从e.CommandArgument
获取值。它将返回选定的行数据键值
或者,您可以通过传递数据键名称的名称来获取它,例如gv_moreCourses.DataKeys[“NameofDataKey”]。值代码>
索引将具有所选数据键的值,就像它可以具有与0
不同的值一样,因为它需要数据键索引gv\u更多课程。数据键[DataKey]
您可以直接从e.CommandArgument
获取值。它将返回选定的行数据键值
或者,您可以通过传递数据键名称的名称来获取它,例如gv_moreCourses.DataKeys[“NameofDataKey”]。值代码>错误是否出现在表的索引行上?这似乎是一个索引错误。您是否给出了正确范围内的索引值?程序的另一部分可能从1开始索引,而这部分需要从0开始索引
我第一次看到这一点时就想到了,但没有深入研究您的问题。错误是否出现在表的索引行上?这似乎是一个索引错误。您是否给出了正确范围内的索引值?程序的另一部分可能从1开始索引,而这部分需要从0开始索引
我在第一次查看时就想到了这一点,但没有深入研究您的问题。对于名为gv_courses
的GridView,在RowCommand
事件中,您正在获取索引,然后引用另一个名为gv_more courses
的GridView来获取密钥。如果gv_课程
的行数多于gv_moreCourses
(或gv_moreCourses
没有定义的键),则单击第二个网格上不存在的后一行索引之一会出错。你是不是想让那个人说这个
ICollection keys = gv_courses.DataKeys[index].Values;
^^^^ remove "more"
Edit数据键.Values的返回类型实际上是System.Collections.Specialized.iorderedictionary
,它包含索引器和属性.Keys
和.Values
,便于访问键的内容:
IOrderedDictionary keys = gv_courses.DataKeys[index].Values;
^^^^ change ICollection to IOrderedDictionary
keys[0] ... // permission_code
keys[1] ... // lect_code
keys[2] ... // note_title
keys[3] ... // iscourse
在名为gv_课程
的GridView的row命令
事件中,您获取索引,然后引用另一个名为gv_课程
的GridView来获取密钥。如果gv_课程
的行数多于gv_moreCourses
(或gv_moreCourses
没有定义的键),则单击第二个网格上不存在的后一行索引之一会出错。你是不是想让那个人说这个
ICollection keys = gv_courses.DataKeys[index].Values;
^^^^ remove "more"
Edit数据键.Values的返回类型实际上是System.Collections.Specialized.iorderedictionary
,它包含索引器和属性.Keys
和.Values
,便于访问键的内容:
IOrderedDictionary keys = gv_courses.DataKeys[index].Values;
^^^^ change ICollection to IOrderedDictionary
keys[0] ... // permission_code
keys[1] ... // lect_code
keys[2] ... // note_title
keys[3] ... // iscourse
你没有完成的那个例外被抛出。确保强制索引在您的特定范围内。当我跟踪时,我会得到正确的索引
。将抛出您未完成的例外项。确保强制索引在您的特定范围内。当我跟踪时,我将获得正确的索引。嗯,我从中获得所选行的索引,但我想从数据库中获取要删除的主键。CommandArgument将返回您正在查找的内容。只需调试它。intindex=Convert.ToInt32(e.CommandArgument)代码>。没有任何问题,下一个问题。嗯,我从中获取所选行的索引,但我想获取要从数据库中删除的主键。CommandArgument将返回您正在查找的内容。只需调试它。intindex=Convert.ToInt32(e.CommandArgument)代码>。没有任何问题,下一个问题。太好了,你解决了我的第一个问题,然后是如何获取我密钥集合中的每个密钥。LINQ。非常感谢。请回答我问题的第二部分。这是复制和粘贴的缺点,我为我的gridviewgv_moreCourses
编写代码,然后粘贴它,忘记编辑这一行。太好了,你解决了我的第一个问题,然后解决了如何获取密钥集合中的每个密钥。LINQ.非常感谢。请回答我问题的第二部分。这是复制和粘贴的缺点,我为我的gridviewgv_moreCourses
编写代码,然后粘贴它,忘记编辑这一行。