【问题标题】:datagrid get selected rows and cells values in wpf c#datagrid在wpf c#中获取选定的行和单元格值
【发布时间】:2018-06-03 15:57:05
【问题描述】:

我想在 wpf 上重做旧 Windows 窗体应用程序的代码,但在引用 datagridview 时遇到问题。

这是我的旧应用程序的空白外观:

private void button2_Click(object sender, EventArgs e)
    {
        if (DGV1.Rows.Count > 0 && DGV1.SelectedRows != null)
        {
            bool wart = true;
            for (int i = 0; i < listBox2.Items.Count; i++)
            {
                listBox2.SelectedIndex = i;
                int w1 = Int32.Parse(listBox2.SelectedItem.ToString());
                int w2 = Int32.Parse(DGV1.SelectedRows[0].Cells[0].Value.ToString());

                if (w1 == w2)
                {
                    wart = false;
                    break;
                }
            }
            if (wart)
            {
                listBox2.Items.Add(DGV1.SelectedRows[0].Cells[0].Value);
            }
        }
    }

这是我的新应用程序的空白外观:

private void Button1_Click(object sender, RoutedEventArgs e)
    {
        IList rows = dataGrid1.SelectedItems;

        if(dataGrid1.SelectedItem != null)
        {
            bool wart = true;
            

            for (int i =0; i < listBox1.Items.Count; i++)
            {
                listBox1.SelectedIndex = i;
                object item = dataGrid1.SelectedItem;

                int w1 = Int32.Parse(listBox1.SelectedItem.ToString());
                int w2 = Int32.Parse(dataGrid1.SelectedCells[0].Column.GetCellContent(item).ToString()); <--- !!

                if(w1 == w2)
                {
                    wart = false;
                    break;
                }
            }

            if(wart)
            {
                listBox1.Items.Add(dataGrid1.SelectedCells[0]); <-- !!
            }
        }
    }

应用程序在第二个 if 处溢出,它显示:

它应该是:

请帮忙:-)

【问题讨论】:

    标签: c# wpf datagridview datagrid


    【解决方案1】:

    应该是这样的:

    listBox1.Items.Add(dataGrid1.CurrentRow.Cells[0].Value);
    

    此代码来自 WinForms,但我认为 wpf 的编码可能没有什么不同,因为两者都在 c# 中。

    【讨论】:

    • 很遗憾,它不起作用,'currentRow' 没有参考。
    【解决方案2】:

    dataGrid1.SelectedItem 不仅仅是一些object,它具有具体的类型和属性,例如Id、Tytul、Kategorie、Text

    您需要对该具体类型和访问属性进行强制转换,而不是尝试从 DataGridCellInfo 等低级 UI 元素中获取值:

    var item = (MyConcreteClass)dataGrid1.SelectedItem;
    int w2 = item.Id;
    

    【讨论】:

    • var cellInfo = dataGrid1.SelectedCells[0]; int w2 = Int32.Parse(cellInfo.Column.GetCellContent(cellInfo.Item).ToString()); System.InvalidOperationException: "元素已经有一个逻辑父元素。"摆脱旧模式“。怎么了??
    • 使用低级 UI 元素很容易出错。有时需要有深入的框架知识才能理解问题所在。 SelectedItem 应包含您的业务逻辑所需的所有数据
    猜你喜欢
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2017-08-18
    • 2011-12-22
    相关资源
    最近更新 更多