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

WPFDataGrid没有行的概念吗?怎么能拿到选中行的索引?DataGrid.SelectedIndex返回的值是-1没有拿到,要怎么才能拿到啊??小的,没分,对不住各... WPF DataGrid 没有行的概念吗?怎么能拿到选中行的索引? DataGrid.SelectedIndex 返回的值是-1 没有拿到,要怎么才能拿到啊??
小的,没分,对不住各位了..
展开
 我来答
龍过鸡年
推荐于2018-03-19 · TA获得超过311个赞
知道小有建树答主
回答量:308
采纳率:100%
帮助的人:366万
展开全部

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

// 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 */
}
sixhaveon
2018-11-05 · TA获得超过135个赞
知道答主
回答量:40
采纳率:0%
帮助的人:17.9万
展开全部
我的测试结果是这样的:
SelectedIndex——在SelectedCellsChanged事件中,如果SelectionUnit是FullRow,则这个值返回的就是当前击中的行号,如果SelectionUnit是Cell或CellOrRowHeader则点击时总是返回-1。要是在CurrentCellChanged事件中取得这个值,如果SelectionUnit是FullRow,则每次取得的都是上一次选中行的行索引值,第一次点击一行则返回-1(CurrentCellChanged在SelectedCellsChanged前触发),如果SelectionUnit是Cell或CellOrRowHeader则点击时总是返回-1。参照前面答友,当SelectIndex取值不对时,可以用DataGrid1.Items.IndexOf(DataGrid1.CurrentItem)取得击中的行号。
感觉这应该是是个坑吧,或者理解的不到位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhouxiang_1216
2013-11-14 · TA获得超过2590个赞
知道大有可为答主
回答量:1286
采纳率:33%
帮助的人:1362万
展开全部
肯定是有行的,是不是操作不对,贴一下代码看一下,或者你试试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,基本不需要这样的操作,要不你描述一下需求,看看能不能用其它比较合适的方式解决
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式