У меня есть привязка datagridview с данными, поступающими из базы данных, которая отлично работает. Он загружается данными при загрузке формы. В соответствии с требованием клиента я добавил новый столбец кнопок в представление сетки данных, используя следующий код
private void form1_load
{
var productsbycount = abc.products.GroupBy(x => x.product_Id).Select(a => new
{
productid = a.Key,
prouctnam = a.FirstOrDefault().product_Name,
productimage = a.FirstOrDefault().product_Image,
productdescr = a.FirstOrDefault().product_Description,
stockavailable = a.LongCount(),
productprice = a.FirstOrDefault().product_Price
});
productbindingsource.DataSource = productsbycount;
productgridview.DataSource = productbindingsource;
DataGridViewButtonColumn buttoncolumn = new DataGridViewButtonColumn();
productgridview.Columns.Add(buttoncolumn);
buttoncolumn.Text = "Buy";
buttoncolumn.HeaderText = "Buy";
buttoncolumn.UseColumnTextForButtonValue = true;
buttoncolumn.Name = "btnbuy";
productgridview.Columns[0].Visible = false;
}
когда форма загружается, она работает нормально.
но я проверяю условия, например, если мы выбираем любой элемент в чем-то вроде списка, представление сетки данных сортируется в соответствии с выбранным элементом... для этого я сделал вот так....
if (lstviewcategories.SelectedItems[0].Value.ToString() == "All")
{
var productsbycount = abc.products.GroupBy(x => x.product_Id).Select(a => new
{
productid = a.Key,
prouctnam = a.FirstOrDefault().product_Name,
productimage = a.FirstOrDefault().product_Image,
productdescr = a.FirstOrDefault().product_Description,
stockavailable = a.LongCount(),
productprice = a.FirstOrDefault().product_Price
});
productbindingsource.DataSource = productsbycount;
productgridview.DataSource = productbindingsource;
DataGridViewButtonColumn buttoncolumn = new DataGridViewButtonColumn();
productgridview.Columns.Add(buttoncolumn);
buttoncolumn.Text = "Buy";
buttoncolumn.HeaderText = "Buy";
buttoncolumn.UseColumnTextForButtonValue = true;
buttoncolumn.Name = "btnbuy";
productgridview.Columns[0].Visible = false;
}
- если я нажму на первый элемент списка («Все»), представление сетки данных работает нормально....
- если я снова нажму на первый элемент списка («Все»), столбец кнопок появится два раза ....
- если я снова нажму на первый элемент списка ("Все"), столбец кнопок появится три раза...
Это то, что происходит со всеми элементами списка.
Мой вопрос: есть ли другой способ добавить столбец кнопок в представление сетки данных?
Я попытался добавить столбец кнопок в form1.cs[design], это повлияет на фактические столбцы в представлении datagridview. Я работаю в winforms с языком С#. Может ли кто-нибудь предложить какую-либо идею об этом?
Предположим, если я удалю приведенный ниже код в этом цикле
if (lstviewcategories.SelectedItems[0].Value.ToString() == "All")
{
}
Фактический столбец кнопок исчез. Кто-нибудь, пожалуйста, помогите в этом.
ИЗМЕНЕННЫЙ КОД:
ПЕРВОЕ УСЛОВИЕ: если (lstviewcategories.SelectedItems[0].Text.ToString() == CategoryType.Type2) {
var productsbycount = abc.products.GroupBy(x => x.product_Id).Where(a => a.FirstOrDefault().product_Price > 0 && a.FirstOrDefault().product_Price <= 1000)
.Select(a => new
{
productid = a.Key,
prouctnam = a.FirstOrDefault().product_Name,
productimage = a.FirstOrDefault().product_Image,
productdescr = a.FirstOrDefault().product_Description,
stockavailable = a.LongCount(),
productprice = a.FirstOrDefault().product_Price
});
productbindingsource.ResetBindings(false);
/*productbindingsource.DataSource = productsbycount;
productgridview.DataSource = productbindingsource;
DataGridViewButtonColumn buttoncolumn = new DataGridViewButtonColumn();
productgridview.Columns.Add(buttoncolumn);
buttoncolumn.Text = "Buy";
buttoncolumn.HeaderText = "Buy";
buttoncolumn.UseColumnTextForButtonValue = true;
buttoncolumn.Name = "btnbuy";
productgridview.Columns[0].Visible = false;*/
}
Второе условие:
if (lstviewcategories.SelectedItems[0].Text.ToString() == CategoryType.Type3)
{
var productsbycount = abc.products.GroupBy(x => x.product_Id).Where(a => a.FirstOrDefault().product_Price > 500 && a.FirstOrDefault().product_Price <= 1000)
.Select(a => new
{
productid = a.Key,
prouctnam = a.FirstOrDefault().product_Name,
productimage = a.FirstOrDefault().product_Image,
productdescr = a.FirstOrDefault().product_Description,
stockavailable = a.LongCount(),
productprice = a.FirstOrDefault().product_Price
});
productbindingsource.ResetBindings(false);
/* productbindingsource.DataSource = productsbycount;
productgridview.DataSource = productbindingsource;
DataGridViewButtonColumn buttoncolumn = new DataGridViewButtonColumn();
productgridview.Columns.Add(buttoncolumn);
buttoncolumn.Text = "Buy";
buttoncolumn.HeaderText = "Buy";
buttoncolumn.UseColumnTextForButtonValue = true;
buttoncolumn.Name = "btnbuy";
productgridview.Columns[0].Visible = false;*/
}
эти условия буксировки не работают..