C# 如何使用.NET Windows窗体中的实体框架向DataGridView添加自定义按钮
我正在开发一个.NET Windows窗体应用程序。坦率地说,我是.NETWindows窗体的绝对初学者。但我是ASP.NET开发人员。我正在进行我的第一个windows窗体项目。现在我在使用实体框架将数据绑定到DataGridView时遇到了问题。我想添加两个自定义按钮列。但我不知道怎么做,因为我是Windows窗体控件的绝对初学者 我的代码如下:C# 如何使用.NET Windows窗体中的实体框架向DataGridView添加自定义按钮,c#,.net,entity-framework,datagridview,datasource,C#,.net,Entity Framework,Datagridview,Datasource,我正在开发一个.NET Windows窗体应用程序。坦率地说,我是.NETWindows窗体的绝对初学者。但我是ASP.NET开发人员。我正在进行我的第一个windows窗体项目。现在我在使用实体框架将数据绑定到DataGridView时遇到了问题。我想添加两个自定义按钮列。但我不知道怎么做,因为我是Windows窗体控件的绝对初学者 我的代码如下: RestaurantContext context = new RestaurantContext();
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;
当我运行代码时,我得到如下结果:
但是我想在末尾添加两个额外的列。两个添加的列将分别包含一个按钮。然后我为每个按钮设置事件。按钮类似于“编辑”和“删除”。他们的逻辑将是如此复杂。我不想直接从数据库绑定。我只想与对象绑定。发布的代码看起来很奇怪,因为它似乎在制作一个不需要的食物列表。遵循代码。。。正在从RestaurantContex获取数据,不管是什么。变量
dbFoods
显然是这些食品的列表或数据表。很难说返回什么类型的结构。不管它是什么,代码都会在这个列表/表中循环,并创建一个新的FoodMenuRow
对象,并设置相应的属性。然后将此FoodMenuRow
添加到rows
列表中。这看起来没有必要,因为您可能会将dbFoods
本身用作数据源到datagridfoodmens
。填充行
列表后,它将作为数据源
添加到dataGridFoodMenu
由于您描述的“编辑”和“删除”两个按钮实际上不是gatagridfoodmens
中数据的一部分,您可以在填充网格后添加这些按钮列,如下所示
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);
添加的按钮应显示如下所示
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);
}
}
}
我希望这能有所帮助