You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GridView DataKeys计数为0且e.RowIndex为5时出错,求技术协助

解决GridView RowDeleting事件中DataKeys.Count=0的报错问题

咱们先拆解下问题根源:当e.RowIndex=5时gridView1.DataKeys.Count=0,本质是你的GridView没有正确配置DataKeyNames属性——这个属性是GridView用来存储行主键的关键配置,没设置的话DataKeys集合会一直是空的,只是刚好在第5行触发了报错而已。

下面是具体的修复步骤:

1. 配置GridView的DataKeyNames(最核心)

在你的ASPX页面中,找到gridView1的标签,添加DataKeyNames属性指定主键字段:

<asp:GridView ID="gridView1" runat="server" 
    OnRowDeleting="gridView1_RowDeleting"
    DataKeyNames="T10_CodGar"  <!-- 加上这行,指定你的主键字段 -->
    <!-- 其他属性保持不变 -->
>

设置后,GridView绑定数据时会自动把T10_CodGar的值存入DataKeys集合,后续就能正常获取了。

2. 增加判空检查,避免索引越界报错

即使配置了DataKeyNames,也建议在代码里增加安全校验,防止意外情况:

protected void gridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    try 
    { 
        // 先判断行索引是否合法,DataKeys是否有数据
        if (e.RowIndex >= 0 && e.RowIndex < gridView1.DataKeys.Count)
        {
            string T10_CodGar = gridView1.DataKeys[e.RowIndex].Values["T10_CodGar"].ToString();
            
            // 用using自动管理数据库连接,避免资源泄漏
            using (SqlConnection con = new SqlConnection(你的数据库连接字符串))
            {
                con.Open();
                // 改用参数化查询,避免SQL注入风险
                SqlCommand cmd = new SqlCommand("delete from [PUMA2_FINANZIARIAFAMILIARE].[dbo].[TCOR10] where T10_CodGar=@CodGar", con);
                cmd.Parameters.AddWithValue("@CodGar", T10_CodGar);
                
                int result = cmd.ExecuteNonQuery();
                if (result == 1) 
                { 
                    loadStores1(); 
                    // 可以在这里添加成功提示,比如lblmsg.Text = "删除成功";
                }
            }
        }
        else
        {
            // 处理无法获取主键的情况,比如记录日志或提示用户
            // lblmsg.Text = "无法获取当前行的主键信息,删除失败";
        }
    } 
    catch (Exception ex) 
    { 
        // 建议在这里记录异常日志,方便排查问题
        // Logger.Error("删除数据失败", ex);
    } 
}

3. 额外优化:避免SQL注入和资源泄漏

  • 替换原来的字符串拼接SQL为参数化查询,这能有效防止SQL注入攻击,同时避免特殊字符导致的语法错误。
  • 使用using语句包裹数据库连接和命令,这样即使代码报错,资源也会自动释放,不会造成数据库连接泄漏。

按照上面的步骤修改后,DataKeys.Count就不会为0了,也能避免后续的报错问题。

内容的提问来源于stack exchange,提问作者MrTony78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:20:37