Member 14608841 Ответов: 1

C# выбранный элемент из списка в datagridview


у меня есть ItemID, ItemName, Quantity, Date и ItemStatus из таблицы инвентаризации в базе данных sql.


мне нужны только ItemID и itemName количество будет уменьшено если я хочу 5 кол во от выбранного товара если товар имеет 21 то оно должно быть уменьшено до 16

Capture5 — imgbb.com[^]

когда я добавляю выбранный элемент из списка и отображаю его в datagridview, он возвращает system.data.datarowview

Что я уже пробовал:

private void Checkout_Load(object sender, EventArgs e)
        {
            LoadData();
        }



        public void LoadData()
        {
            SqlConnection con = Connection.GetConnection();

            SqlDataAdapter sda = new SqlDataAdapter("Select * From [Inventory].[dbo].[Inventory]", con);


            DataTable dt = new DataTable();
            sda.Fill(dt);



            listBox1.DataSource = dt;
            listBox1.DisplayMember = "ItemName";
            listBox1.ValueMember = "ItemID";

            dataGridView1.Rows.Clear();
                                  
            
                foreach (var item in listBox1.SelectedItems)
                {
                    int index = dataGridView1.Rows.Add();
                    dataGridView1.Rows[index].Cells["Column1"].Value = item.ToString();
                    dataGridView1.Rows[index].Cells["Column2"].Value = item.ToString();
                    dataGridView1.Rows[index].Cells["Column3"].Value = textBox3.Text;
                    dataGridView1.Rows[index].Cells["Column4"].Value = textBox1.Text;
                }
            
        }
            




        private void buttonAddtoCart_Click(object sender, EventArgs e)
        {
            LoadData();
        }

       
    }

}

Keith Shirogane

я знаю, что она уже решена, но я просто положу ее сюда, так как не могу добавить другое решение


ВАР атрибут Itemid = (список listbox1.Элемент в качестве объекта datarowview)["идентификатор элемента"].Метод toString();
ВАР имя = (список listbox1.Элемент в качестве объекта datarowview)["имя"].Метод toString();


инт Н = dataGridView1.Строк.Добавить();

dataGridView1.Rows[n].Ячейки["Column1"].Value = itemid;
dataGridView1.Rows[n].Ячейки["Column2"].Value = itemname;
dataGridView1.Rows[n].Ячейки["Column3"].Value = textBox3.Text;
dataGridView1.Rows[n].Ячейки["Column4"].Value = textBox1.Text;


}

Richard MacCutchan

Спасибо за дополнительную информацию. Как я уже упоминал ниже, моя привязка данных фу не так хороша.

Keith Shirogane

не беспокойся об этом ... мы все еще учимся. :Д

1 Ответов

Рейтинг:
8

Richard MacCutchan

Я изучил это, и оказалось, что из-за привязки данных значения, возвращаемые в списке SelectedItems, являются объектами DataRowView. Каждый из которых содержит DataRow источника данных в качестве члена. Таким образом, следующий код будет перечислять ваши элементы.

foreach (DataRowView rowview in listBox1.SelectedItems)
{
    int index = dataGridView1.Rows.Add();
    var itemid = rowview["ItemID"].ToString();
    var itemname = rowview["ItemName"].ToString();
    dataGridView1.Rows[index].Cells["Column1"].Value = itemid;
    dataGridView1.Rows[index].Cells["Column2"].Value = itemname);
}

Я подозреваю, что на самом деле это не совсем правильный способ сделать это, но мои знания о привязке данных в лучшем случае довольно отрывочны.

[редактировать]
Обновлено с улучшенным кодом, благодаря Киту Широгане.
[/редактировать]


Member 14608841

я изменил object на var в своем операторе foreach, но все равно возвращает system.data.datarowview

Richard MacCutchan

Попробуйте изменить его на String.

Richard MacCutchan

Смотрите мое обновленное решение.

Member 14608841

Спасибо, что это работает.. не беспокойтесь о правильном способе сделать это, пока это работает, должно быть хорошо.