Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在排序数据视图中获得正确的行?_.net_Winforms_Forms_Datagrid - Fatal编程技术网

.net 如何在排序数据视图中获得正确的行?

.net 如何在排序数据视图中获得正确的行?,.net,winforms,forms,datagrid,.net,Winforms,Forms,Datagrid,我有一个包含一个小表的数据网格。到目前为止,我在这个网格上有一个双击处理程序,它遍历所有行以查找所选行: DataTable table = (DataTable)this.dataGrid.DataSource; int selectedRow = -1; for (int i=0; i<table.Rows.Count; i++) if (this.dataGrid.IsSelected(i)) selectedRow = i; break; } if ( se

我有一个包含一个小表的数据网格。到目前为止,我在这个网格上有一个双击处理程序,它遍历所有行以查找所选行:

DataTable table = (DataTable)this.dataGrid.DataSource;
int selectedRow = -1;
for (int i=0; i<table.Rows.Count; i++)
  if (this.dataGrid.IsSelected(i))
    selectedRow = i;
    break;
  }
if ( selectedRow != -1 ) {
  DataRow row = table.Rows[selectedRow];
  // More code ...
}
DataTable=(DataTable)this.dataGrid.DataSource;
int selectedRow=-1;

对于(int i=0;i为什么不使用
DataGridView.SelectedRows
属性?然后对这些行使用
DataBoundItem
来访问基础数据。这可能是
DataRowView
类型。在这种情况下,请使用
DataRowView.Row
属性

foreach (DataGridViewRow dgvrow in dataGrid.SelectedRows)
{
  DataRow row = null;
  if (dgvrow.DataBoundItem is DataRowView)
    row = (dgvrow.DataBoundItem as DataRowView).Row as DataRow;
  else
    row = dgvrow.DataBoundItem as DataRow;

  // ... stuff
}
数据网格(Windows) 试试下面的
DataGrid.GetSelectedDataRows
,其中
MyBase
是您的
DataGrid
的名称

    Public Function GetSelectedDataRows() As DataRow()
        Dim oSelectedRows As New ArrayList
        Dim oDataTable As DataTable = DirectCast(MyBase.DataSource, DataTable)
        For i As Integer = 0 To oDataTable.Rows.Count - 1
            If MyBase.IsSelected(i) Then
                oSelectedRows.Add(oDataTable.DefaultView(i).Row)
            End If
        Next
        Return DirectCast(oSelectedRows.ToArray(GetType(DataRow)), DataRow())
    End Function
数据表格控件 使用
SelectedRows
属性。它返回
DataGridViewRow
对象的集合。因为您知道您正在绑定
DataTable
,所以
DataGridViewRow.DataBoundItem
属性将是一个
DataRow
。有关示例,请查看上述对象帮助主题

工具书类
  • 上的Windows窗体DataGridView和DataGrid控件之间的差异

  • DataGridView类位于

  • 数据网格类位于

摘录 DataGrid控件保留为 向后兼容性和特殊的 需要。几乎所有的目的,你 应使用DataGridView控件。 中唯一可用的功能 不可用的DataGrid控件 在DataGridView控件中可用 是的层次显示 中两个相关表的信息 一个控件。必须使用两个 要显示的DataGridView控件 来自以下两个表的信息: 在主/细节关系中


您必须小心使用术语“DataGrid”和“DataGridView”。在所有版本的.NET中都有一个“DataGrid”Windows.Forms控件。在2.0中引入了“DataGridView”Windows.Forms控件。这两个控件不共享相同的属性。“我可以简单地用DataGridView替换DataGrid吗?”如果这是一新的开发,则替换它。“DataGrid控件概述(Windows窗体)”注意,有一个Web“DataGrid”“。这不是一个web平台,它是一个较旧的应用程序,简单地替换它是不起作用的,因为DataGridView似乎丢失了应用程序代码中设置的一些其他属性。但我会进一步查看,谢谢。是的,正如我所说。你能说明我的代码示例有什么问题吗?我看不出什么不应该“看起来正确”…由于问题改为
DataGrid
control,您的代码不是相对的,所以如果我觉得代码有点奇怪,也没什么区别。:O)我没意识到他现在在谈论DataGrid:-啊,他也抓住了我。:O) 谢天谢地,我仍然支持.NET1.1应用程序,所以代码已经准备好了。