简体   繁体   中英

datagrid get selected rows and cells values in wpf c#

I would like to redo the code of my old windows forms application on wpf and I have a problem with referencing datagridview.

This is the void look of my old application:

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);
            }
        }
    }

This is the void look of my new application:

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]); <-- !!
            }
        }
    }

The application spills out at the second if, where it displays: 在此处输入图片说明

And it should be: 在此处输入图片说明

Please Help :-)

It should probably be like this:

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

This code is from WinForms, but I assume the coding for wpf may not be different, since both are in c#.

dataGrid1.SelectedItem isn't just some object , it has concrete type and properties like Id , Tytul , Kategorie , Text

you need to make a cast to that concrete type and access property instead of trying to get the value from low-level UI elements like DataGridCellInfo:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM