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

如何在DataGrid中获取选中行的值?DataGridView方案不适用

在WinForms DataGrid中捕获点击事件并获取选中行的ID值

我完全懂你现在的困扰——WinForms里的DataGrid和DataGridView虽然名字相近,但它们的事件模型和行数据获取方式差异很大,之前用DataGridView的SelectedRows那套逻辑套过来肯定行不通。下面我给你详细说怎么解决这个问题:

核心差异说明

DataGridView是后来推出的增强版控件,自带SelectedRows集合方便获取选中行;但DataGrid是早期的老控件,没有这个集合,它的选中行需要通过CurrentRow(单行选中场景)或者绑定上下文来处理。


方案1:单行选中时,通过SelectionChanged或Click事件获取ID

这是最常用的场景,比如点击某行后获取该行的ID值:

第一步:绑定事件

你可以在窗体初始化代码(比如Form_Load)里给DataGrid绑定事件,或者直接在设计器里双击控件添加事件:

// 初始化DataGrid之后绑定SelectionChanged事件
gridData.SelectionChanged += GridData_SelectionChanged;
// 或者绑定Click事件,效果类似
gridData.Click += GridData_Click;

第二步:编写事件处理方法

不管用哪个事件,获取选中行ID的逻辑是一致的——因为DataGrid绑定DataTable时,行数据是以DataRowView的形式存在的,我们需要把CurrentRow转换成这个类型来访问列值:

private void GridData_SelectionChanged(object sender, EventArgs e)
{
    // 先判断是否有选中行,避免空引用异常
    if (gridData.CurrentRow != null)
    {
        // 转换为DataRowView类型
        DataRowView selectedRowView = (DataRowView)gridData.CurrentRow;
        // 获取ID列的值,注意做类型转换(因为返回的是object)
        int selectedId = Convert.ToInt32(selectedRowView["ID"]);
        
        // 这里就可以使用selectedId做后续逻辑了,比如打印、弹窗或者业务处理
        Console.WriteLine($"选中的ID是:{selectedId}");
    }
}

// Click事件的处理逻辑和上面完全一样
private void GridData_Click(object sender, EventArgs e)
{
    if (gridData.CurrentRow != null)
    {
        DataRowView selectedRowView = (DataRowView)gridData.CurrentRow;
        int selectedId = Convert.ToInt32(selectedRowView["ID"]);
        // 你的业务代码
    }
}

方案2:处理多行选中的场景

如果你的DataGrid允许多行选中,那需要通过绑定上下文(BindingManagerBase)来遍历所有选中的行:

private void GetAllSelectedIds()
{
    // 获取DataGrid的绑定上下文
    BindingManagerBase bindingManager = gridData.BindingContext[gridData.DataSource];
    
    // 遍历所有行,判断是否被选中
    foreach (DataRowView rowView in bindingManager.List)
    {
        if (bindingManager.IsSelected(rowView))
        {
            int id = Convert.ToInt32(rowView["ID"]);
            // 处理每个选中的ID,比如添加到集合里
            Console.WriteLine($"选中的ID:{id}");
        }
    }
}

你可以把这个方法放到SelectionChanged事件里,每次选中变化时自动获取所有选中ID。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:59:28