正常に機能するデータベースからのデータとの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;
}
- リストビューの最初のアイテム(「すべて」)をクリックすると、データグリッドビューは正常に機能しています...。
- リストビューの最初のアイテム(「すべて」)をもう一度クリックすると、ボタンの列が2回表示されます...。
- リストビューの最初のアイテム(「すべて」)をもう一度クリックすると、ボタンの列が3回表示されます...
これは、リストビューのすべてのアイテムで発生していることです。
私の質問は、データグリッドビューにボタン列を追加する他の方法はありますか?
form1.cs [design]にボタン列を追加しようとしましたが、これはdatagridviewの実際の列に影響します。私はC#言語のWinFormで作業しています。誰かがこれらについて何かアイデアを提案できますか?
このループで以下のコードを削除するとします
if (lstviewcategories.SelectedItems[0].Value.ToString() == "All")
{
}
実際のボタンの列が消えました。誰かがこれを手伝ってくれませんか。
変更されたコード:
最初の条件:if(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;*/
}
2番目の条件:
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;*/
}
これらの牽引条件は機能していません..