问:
我有一个gridview,我尝试删除一些记录,我将主键存储在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" />
例外情况是:在此行gv_moreCourses.DataKeys[index];
System.ArgumentOutOfRangeException
2-如果我解决了第一个问题,如何访问keys
中的每个值.infer LINQ
。
答案 0 :(得分:3)
对于名为RowCommand
的GridView,在gv_courses
事件中,您正在获取索引,然后引用另一个名为gv_moreCourses
的GridView来获取密钥。如果gv_courses
的行数多于gv_moreCourses
(或gv_moreCourses
没有已定义的键),那么点击其中一个后面的行索引会出现错误存在于第二个网格上。你有意这样说吗?
ICollection keys = gv_courses.DataKeys[index].Values;
^^^^ remove "more"
修改 DataKeys.Values
的返回类型实际上是System.Collections.Specialized.IOrderedDictionary
,其中包含一个索引器和属性.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
答案 1 :(得分:1)
int index = Convert.ToInt32(e.CommandArgument);
索引将具有Selected Data Key的值,因为它可以具有与0
不同的值,因为它将需要DataKey Index gv_moreCourses.DataKeys[DataKey]
您可以直接从e.CommandArgument
获取值。它将返回Selected Row Data键值
或者,您可以通过传递DataKey名称来获取它,例如gv_moreCourses.DataKeys["NameofDataKey"].Values;
答案 2 :(得分:1)
错误是否出现在索引表的行上?这似乎是一个索引错误。您是否给出了正确范围内的指数值?可能是程序的其他部分从1开始索引,而这部分需要它们从0开始。
首先看到这一点,但没有更深入地了解你的问题。