WPF DataGrid 没有行的概念吗?怎么能拿到选中行的索引? DataGrid.SelectedIndex 返回的值是-1,要怎么拿?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF DataGrid 没有行的概念吗?怎么能拿到选中行的索引? DataGrid.SelectedIndex 返回的值是-1,要怎么拿?相关的知识,希望对你有一定的参考价值。
WPF DataGrid 没有行的概念吗?怎么能拿到选中行的索引? DataGrid.SelectedIndex 返回的值是-1 没有拿到,要怎么才能拿到啊??
小的,没分,对不住各位了..
我帮你写了一段代码,你试试
// dg = dataGridvar 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,基本不需要这样的操作,要不你描述一下需求,看看能不能用其它比较合适的方式解决
wpf datagrid绑定了数据 如果选中多行中怎么获取选中行的某列的值
参考技术A private void fill_Datagrid(string sql)cmd = new SqlCommand(sql, conn.getConn());
sda = new SqlDataAdapter();
sda.SelectCommand = cmd;
ds = new DataSet();
sda.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.Columns[0].Visible = false;
其中sql=“select 字段 from a,b,c where 字段 =?”;
sql是在数据库中查询语句。 参考技术B DataRowView selectItem = datagird.SelectItem as DataRowView;
object obj = selectItem["columnName"] or selectItem[index];
以上是关于WPF DataGrid 没有行的概念吗?怎么能拿到选中行的索引? DataGrid.SelectedIndex 返回的值是-1,要怎么拿?的主要内容,如果未能解决你的问题,请参考以下文章