vb中如何获取datagrid选中行的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb中如何获取datagrid选中行的值?相关的知识,希望对你有一定的参考价值。

参考技术A 先说明datagrid的一些属性,说清楚了,自然解决方法就明了了。
说明:
Bookmark:设置或返回当前的行标签号
DataGrid1.Columns("ProductID").CellText(DataGrid1.Bookmark)
返回当前行中字段为‘ProductID’的值。

DataGrid
被连接到一个数据库后,可能想要监视用户单击了哪一个单元。可以使用
RowColChange
事件——而不是
Click
事件。
如;
Private
Sub
DataGrid1_RowColChange(LastRow
As
Variant,
ByVal
LastCol
As
Integer)
Debug.Print
_DataGrid1.Columns("ProductID").CellValue(DataGrid1.Bookmark)
End
Sub
通过这个方法就能获得用户点击的行的某个值。
利用一下方法可以控制datagrid每列的宽度;
Dim
c
As
Column
Set
c
=
DataGrid1.Columns.Add(DataGrid1.Columns.Count)
With
c
.Visible
=
True
.Width
=
1000
.Caption
=
"我的新列"
.DataField
=
Adodc1.Recordset.Fields("ProductName").Name
.Alignment
=
dbgRight
End
With
下面的代码将删除被单击的列。
Private
Sub
DataGrid1_HeadClick(ByVal
ColIndex
As
Integer)
DataGrid1.Columns.Remove
ColIndex
End
Sub
参考技术B 在Datagrid中双击某行,可以准确取得当前行某个字段的值(其中一个单元格:也就是对应你数据库的这个字段,你怎么设置这一列是哪个字段就是第几个字段)。要显示这个值时,使用:text1.text=Adodc1.Recordset.fields("你的字段名或以0为起始的序号") 参考技术C 我给个思路你吧,详细代码你自已写吧!
用鼠标选中一行后,读取这一个里你固定一列的内容,最好是固定为编号或者是id号的哪一列,这个编号一定要是唯一的。
然后用sql语句根椐编号查找到该条记录,然后就删除该条记录就ok了。
你上边的语句,记录的指针始终指在第一行,你当然只是删第一行拉。
晕死,谁叫你输入编号去删,你选中某一行后,这行的id号就直接赋值给一个变量,再用sql语句查找,做一个commamd按钮,作为删除用的不就行了.

WPF DataGrid 没有行的概念吗?怎么能拿到选中行的索引? DataGrid.SelectedIndex 返回的值是-1,要怎么拿?

WPF DataGrid 没有行的概念吗?怎么能拿到选中行的索引? DataGrid.SelectedIndex 返回的值是-1 没有拿到,要怎么才能拿到啊??
小的,没分,对不住各位了..

我帮你写了一段代码,你试试

// dg = dataGrid

var index = dg.SelectedIndex;

if (index == -1) // 判断是否选中了某一行

    if (dg.SelectedCells.Count > 0)
    
        // 获取综合信息,包括行、列索引
        // DataGridRow 对象
        // DataGridCell 数据模板中的首元素
        // 获取绑定到 DataGridRow 上的数据对象
        var infos = dg.SelectedCells.Select(s => new
        
            ColumnIndex = s.Column.DisplayIndex,
            RowIndex = dg.Items.IndexOf(s.Item),
            DataItem = s.Item, // 该行所绑定的数据对象
            // 根据 s.Item 获取 DataGridRow
            DataGridRow = dg.ItemContainerGenerator.ContainerFromItem(s.Item),
            // 根据 s.Item 获取单元格模板的首个元素
            VisulRoot = s.Column.GetCellContent(s.Item),
        );

        foreach (var info in infos)
        
            Console.WriteLine("0: (1,2)",
                info.VisulRoot, info.RowIndex, info.ColumnIndex);
        
    

    // 获取 DataGridRow 绑定的数据对象
    var items = dg.SelectedCells.Select(s => s.Item).Distinct();

else

    /* SelectedIndex != -1 */

参考技术A 我的测试结果是这样的:
SelectedIndex——在SelectedCellsChanged事件中,如果SelectionUnit是FullRow,则这个值返回的就是当前击中的行号,如果SelectionUnit是Cell或CellOrRowHeader则点击时总是返回-1。要是在CurrentCellChanged事件中取得这个值,如果SelectionUnit是FullRow,则每次取得的都是上一次选中行的行索引值,第一次点击一行则返回-1(CurrentCellChanged在SelectedCellsChanged前触发),如果SelectionUnit是Cell或CellOrRowHeader则点击时总是返回-1。参照前面答友,当SelectIndex取值不对时,可以用DataGrid1.Items.IndexOf(DataGrid1.CurrentItem)取得击中的行号。
感觉这应该是是个坑吧,或者理解的不到位。
参考技术B 肯定是有行的,是不是操作不对,贴一下代码看一下,或者你试试SelectedItem,或者说明一下具体需求,希望对你有帮助追问

private void dgCGGoods_KeyUp(object sender, KeyEventArgs e)

if ((int)e.Key == 3)
e.Handled = true;
int i = dgCGGoods.SelectedIndex;
按Tab键时进来

追答

DataGrid的KeyUP事件中针对Tab,Enter按键有一些限制,SeledtedIndex返回值为-1说明没有选中,你其实就是想取得当前选中行的索引值吧,为什么不用SelectionChanged事件呢?另外,WPF不是WinForm,基本不需要这样的操作,要不你描述一下需求,看看能不能用其它比较合适的方式解决

以上是关于vb中如何获取datagrid选中行的值?的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET 如何获取datagridview选中项的值

wpf datagrid绑定了数据 如果选中多行中怎么获取选中行的某列的值

C# dataGridView如何自动获取所有行的值?

如何动态设置DataGrid中某些行的选中状态

如何从C#中获取ListView中选中某一行某一列的值

c# DataGridView中,选中了多个行,如何获取选中的每一行的数据,或者每一行的索引?