簡體   English   中英

如何在.NET Windows窗體中使用Entity Framework將自定義按鈕添加到DataGridView

[英]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本身用作dataGridFoodMenuDataSource 在填充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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM