![](/img/trans.png)
[英]Add specific values from DataGridView to Listbox (Windows Forms / NET Framework 4.7)
[英]How to add custom buttons to DataGridView with Entity Framework in .NET Windows Forms
我正在開發.NET Windows窗體應用程序。 坦白說,我絕對是.NET Windows窗體的初學者。 但是我是ASP.NET開發人員。 我在第一個Windows窗體項目中。 現在,我在使用實體框架將數據綁定到DataGridView時遇到問題。 我想添加兩個自定義按鈕列。 但是我不知道該怎么做,因為我絕對是Windows Forms控件的初學者。
我的代碼如下:
RestaurantContext context = new RestaurantContext();
var dbFoods = context.Foods;
List<FoodMenuRow> rows = new List<FoodMenuRow>();
foreach(var food in dbFoods)
{
FoodMenuRow row = new FoodMenuRow
{
FoodId = food.Id,
FoodEnName = food.EnName,
FoodMmName = food.MmName,
IsAvailable = food.Available
};
rows.Add(row);
}
dataGridFoodMenu.DataSource = rows;
如您所見,我從數據庫中加載數據,然后將值分配給對象FoodMenuRow以綁定數據。 因為我不想直接綁定到EF實體。
這是類FoodMenuRow的定義
public class FoodMenuRow
{
public int FoodId { get; set; }
public string FoodMmName { get; set; }
public string FoodEnName { get; set; }
public bool IsAvailable { get; set; }
}
當我運行代碼時,我得到如下信息:
但我想在末尾添加兩列。 添加的兩個列都將包含一個按鈕。 然后我為每個按鈕設置事件。 按鈕,例如“編輯”和“刪除”。 他們的邏輯將是如此復雜。 我不想直接從數據庫綁定。 我只想綁定對象。
所發布的代碼看起來很奇怪,因為它似乎在不必要時列出了食品清單。 遵循代碼...可能會從RestaurantContex
獲取數據。 變量dbFoods
顯然是這些食品的列表或數據表。 很難說返回哪種類型的結構。 無論代碼是什么,都將遍歷此列表/表並創建一個具有適當屬性集的新FoodMenuRow
對象。 然后將此FoodMenuRow
添加到rows
列表。 這看起來沒有必要,因為您似乎可以將dbFoods
本身用作dataGridFoodMenu
的DataSource
。 在填充rows
列表之后,它將作為DataSource
添加到dataGridFoodMenu
。
由於您描述的兩個按鈕“編輯”和“刪除”實際上並不是gataGridFoodMenu
數據的一部分,因此您可以在網格填充后添加這些按鈕列,如下所示。
DataGridViewButtonColumn buttonColEdit = new DataGridViewButtonColumn();
buttonColEdit.Name = "Edit";
buttonColEdit.Text = "Edit";
buttonColEdit.UseColumnTextForButtonValue = true;
DataGridViewButtonColumn buttonColDelete = new DataGridViewButtonColumn();
buttonColDelete.Name = "Delete";
buttonColDelete.Text = "Delete";
buttonColDelete.UseColumnTextForButtonValue = true;
dataGridFoodMenu.Columns.Add(buttonColEdit);
dataGridFoodMenu.Columns.Add(buttonColDelete);
添加的按鈕應顯示如下。
將按鈕添加到dataGridFoodMenu
,剩下的唯一事情就是在單擊按鈕時捕獲它們。 dataGridFoodMenu
事件CellContentClick
是一個事件,可讓您在單擊這些按鈕時進行捕獲。 看上面的圖片,“編輯”列在第4列中,“刪除”列在第5列中。當觸發CellContentClick
事件時,可以檢查是否單擊了按鈕列之一,並執行了必要的操作“編輯”或“刪除”。
private void dataGridFoodMenu_CellContentClick(object sender, DataGridViewCellEventArgs e) {
if (e.ColumnIndex == 4) {
MessageBox.Show("EDIT button clicked at row: " + e.RowIndex);
}
else {
if (e.ColumnIndex == 5) {
MessageBox.Show("DELETE button clicked at row: " + e.RowIndex);
}
else {
// buttons not clicked - ignoring
//MessageBox.Show("Button cells were not clicked -- row: " + e.RowIndex + " Column: " + e.ColumnIndex);
}
}
}
我希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.