datagrid在wpf c#中获取选定的行和单元格值

时间:2018-06-03 15:57:05

标签: c# wpf datagridview datagrid

我想在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溢出时显示: enter image description here

它应该是: enter image description here

请帮助: - )

2 个答案:

答案 0 :(得分:0)

应该是这样的:

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

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

答案 1 :(得分:0)

dataGrid1.SelectedItem不只是一些object,它具有具体的类型和属性,如IdTytulKategorieText < / p>

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

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