C# DataGridView的数据集和组合框
我想在可编辑的C# DataGridView的数据集和组合框,c#,winforms,datagridview,combobox,dataset,C#,Winforms,Datagridview,Combobox,Dataset,我想在可编辑的DataGridView的PatientType列中使用ComboBox。 所以我假设创建数据集,并添加基本表“Patients”和“PatientTypes”表 我是否需要在数据集中进行更多更改以实现我的目标 DataTable table1 = new DataTable("Patients"); table1.Columns.Add("Id"); table1.Columns.Add("Name"); table1.Columns.Add("PatientTypeId");
DataGridView
的PatientType列中使用ComboBox
。
所以我假设创建数据集
,并添加基本表“Patients”和“PatientTypes”表
我是否需要在数据集中进行更多更改以实现我的目标
DataTable table1 = new DataTable("Patients");
table1.Columns.Add("Id");
table1.Columns.Add("Name");
table1.Columns.Add("PatientTypeId");
table1.Rows.Add("sam", 1, 1);
table1.Rows.Add("mark", 2, 2);
DataTable table2 = new DataTable("PatientTypes");
table2.Columns.Add("id");
table2.Columns.Add("Name");
table2.Rows.Add(1, "rich");
table2.Rows.Add(2, "poor");
// Create a DataSet and put both tables in it.
DataSet set = new DataSet("Office");
set.Tables.Add(table1);
set.Tables.Add(table2);
不需要,您不需要对数据集进行更多更改,但需要将DataGridView设置为具有以下内容的combobox列:
- .DataPropertyName属性设置为您希望组合框编辑的患者列,可能是“PatientTypeId”
- 为PatientType数据表设置的.DataSource属性
- .DisplayMember属性设置为您希望组合显示的内容,可能是“name”
- .ValueMember属性设置为您希望combobox用作PatientTypeId的值,可能是“id”
尽管Fabio已经链接到一篇很好的相关文章,但我还是发布了这条建议,因为该文章使用了datagridview的类型化数据集和可视化设计器,因此可能很难根据您的情况调整它给出的建议不,您不需要对数据集进行更多更改,但您确实需要将DataGridView设置为具有以下内容的combobox列:
- .DataPropertyName属性设置为您希望组合框编辑的患者列,可能是“PatientTypeId”
- 为PatientType数据表设置的.DataSource属性
- .DisplayMember属性设置为您希望组合显示的内容,可能是“name”
- .ValueMember属性设置为您希望combobox用作PatientTypeId的值,可能是“id”
尽管Fabio已经链接到一篇很好的相关文章,但我还是发布了这条建议,因为这篇文章使用了datagridview的类型化数据集和可视化设计器,因此很难根据您的情况调整它给出的建议您需要创建一个DataGridViewComboBoxColumn
并设置其数据源,标题文本
,名称
,数据属性名称
,值成员
,显示成员
属性
然后将其添加到datagridview的列中
下面是代码(使用示例数据进行测试)
您需要创建一个DataGridViewComboxColumn
,并设置其DataSource
,HeaderText
,Name
,DataPropertyName
,ValueMember
,DisplayMember
属性
然后将其添加到datagridview的列中
下面是代码(使用示例数据进行测试)
我创建了一些示例应用程序,看看它应该如何工作。
下面是WinForm应用程序的完整代码
namespace DataGridAndComboBox
{
public partial class Form1 : Form
{
List<Users> users = new List<Users>();
List<Months> months = new List<Months>();
public Form1()
{
InitializeComponent();
dataGridView1.CellValueChanged += DataGridView1_CellValueChanged;
Load += Form1_Load;
}
private void Form1_Load(object sender, EventArgs e)
{
months.Add(new Months() { ID = 1, Name = "Jan" });
months.Add(new Months() { ID = 2, Name = "Feb" });
months.Add(new Months() { ID = 3, Name = "Mar" });
users.Add(new Users() { ID = 1, MonthID = 1, Name = "Trump" });
users.Add(new Users() { ID = 2, MonthID = 2, Name = "Clinton" });
users.Add(new Users() { ID = 3, MonthID = 3, Name = "Obama" });
users.Add(new Users() { ID = 4, MonthID = 1, Name = "Reygan" });
users.Add(new Users() { ID = 5, MonthID = 2, Name = "Kennedi" });
users.Add(new Users() { ID = 6, MonthID = 3, Name = "Bush" });
}
//Get data from database
private void ButtonGetData_Click(object sender, EventArgs e)
{
var bindingSourceMonths = new BindingSource()
{
DataSource = months
};
#region Create DataGridView columns
dataGridView1.Columns.Clear();
var userID = new DataGridViewTextBoxColumn()
{
HeaderText = "ID user",
Width = 50,
DataPropertyName = "ID",
Name = "ID"
};
dataGridView1.Columns.Add(userID);
var userName = new DataGridViewTextBoxColumn()
{
HeaderText = "User Name",
Width = 100,
DataPropertyName = "Name",
Name = "Name"
};
dataGridView1.Columns.Add(userName);
var userMonthID = new DataGridViewComboBoxColumn()
{
HeaderText = "Month",
Width = 100,
DataPropertyName = "MonthID",
DataSource = bindingSourceMonths,
ValueMember = "ID",
DisplayMember = "Name",
Name = "MonthID"
};
dataGridView1.Columns.Add(userMonthID);
#endregion
dataGridView1.DataSource = users;
}
//Update database
private void ButtonUpdateData_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
var userID = (int)dataGridView1.Rows[i].Cells[0].Value;
var userName = (string)dataGridView1.Rows[i].Cells[1].Value;
var userMonthID = (int)dataGridView1.Rows[i].Cells[2].Value;
var m = months.First(x => x.ID == userMonthID);
}
}
private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Columns[e.ColumnIndex].Name == "MonthID")
{
Users users = (Users)this.dataGridView1.CurrentRow.DataBoundItem;
var monthName = months.First(x => x.ID == users.MonthID);
}
}
}
#region Classes
public class Months
{
public int ID { get; set; }
public string Name { get; set; }
}
public class Users
{
public int ID { get; set; }
public string Name { get; set; }
public int MonthID { get; set; }
}
#endregion
}
命名空间DataGridAndComboBox
{
公共部分类Form1:Form
{
列表用户=新列表();
列表月份=新列表();
公共表格1()
{
初始化组件();
dataGridView1.CellValueChanged+=dataGridView1\u CellValueChanged;
荷载+=形式1_荷载;
}
私有void Form1\u加载(对象发送方、事件参数e)
{
添加(新月份(){ID=1,Name=“Jan”});
添加(新月份(){ID=2,Name=“Feb”});
添加(新月份(){ID=3,Name=“Mar”});
添加(新用户(){ID=1,MonthID=1,Name=“Trump”});
添加(新用户(){ID=2,MonthID=2,Name=“Clinton”});
添加(新用户(){ID=3,MonthID=3,Name=“Obama”});
添加(新用户(){ID=4,MonthID=1,Name=“Reygan”});
添加(新用户(){ID=5,MonthID=2,Name=“Kennedi”});
添加(新用户(){ID=6,MonthID=3,Name=“Bush”});
}
//从数据库获取数据
私有无效按钮数据单击(对象发送者,事件参数e)
{
var bindingSourceMonths=new BindingSource()
{
数据源=月
};
#区域创建DataGridView列
dataGridView1.Columns.Clear();
var userID=new DataGridViewTextBoxColumn()
{
HeaderText=“ID user”,
宽度=50,
DataPropertyName=“ID”,
Name=“ID”
};
dataGridView1.Columns.Add(userID);
var userName=新DataGridViewTextBoxColumn()
{
HeaderText=“用户名”,
宽度=100,
DataPropertyName=“Name”,
Name=“Name”
};
dataGridView1.Columns.Add(用户名);
var userMonthID=new datagridviewcomboxcolumn()
{
HeaderText=“月”,
宽度=100,
DataPropertyName=“MonthID”,
DataSource=bindingSourceMonths,
ValueMember=“ID”,
DisplayMember=“Name”,
Name=“MonthID”
};
dataGridView1.Columns.Add(userMonthID);
#端区
dataGridView1.DataSource=用户;
}
//更新数据库
私有无效按钮更新数据\单击(对象发送者,事件参数e)
{
对于(int i=0;ix.ID==userMonthID);
}
}
私有void DataGridView1\u CellValueChanged(对象发送方,DataGridViewCellEventArgs e)
{
if(dataGridView1.Columns[e.ColumnIndex].Name==“MonthID”)
{
Users Users=(Users)this.dataGridView1.CurrentRow.DataBoundItem;
namespace DataGridAndComboBox
{
public partial class Form1 : Form
{
List<Users> users = new List<Users>();
List<Months> months = new List<Months>();
public Form1()
{
InitializeComponent();
dataGridView1.CellValueChanged += DataGridView1_CellValueChanged;
Load += Form1_Load;
}
private void Form1_Load(object sender, EventArgs e)
{
months.Add(new Months() { ID = 1, Name = "Jan" });
months.Add(new Months() { ID = 2, Name = "Feb" });
months.Add(new Months() { ID = 3, Name = "Mar" });
users.Add(new Users() { ID = 1, MonthID = 1, Name = "Trump" });
users.Add(new Users() { ID = 2, MonthID = 2, Name = "Clinton" });
users.Add(new Users() { ID = 3, MonthID = 3, Name = "Obama" });
users.Add(new Users() { ID = 4, MonthID = 1, Name = "Reygan" });
users.Add(new Users() { ID = 5, MonthID = 2, Name = "Kennedi" });
users.Add(new Users() { ID = 6, MonthID = 3, Name = "Bush" });
}
//Get data from database
private void ButtonGetData_Click(object sender, EventArgs e)
{
var bindingSourceMonths = new BindingSource()
{
DataSource = months
};
#region Create DataGridView columns
dataGridView1.Columns.Clear();
var userID = new DataGridViewTextBoxColumn()
{
HeaderText = "ID user",
Width = 50,
DataPropertyName = "ID",
Name = "ID"
};
dataGridView1.Columns.Add(userID);
var userName = new DataGridViewTextBoxColumn()
{
HeaderText = "User Name",
Width = 100,
DataPropertyName = "Name",
Name = "Name"
};
dataGridView1.Columns.Add(userName);
var userMonthID = new DataGridViewComboBoxColumn()
{
HeaderText = "Month",
Width = 100,
DataPropertyName = "MonthID",
DataSource = bindingSourceMonths,
ValueMember = "ID",
DisplayMember = "Name",
Name = "MonthID"
};
dataGridView1.Columns.Add(userMonthID);
#endregion
dataGridView1.DataSource = users;
}
//Update database
private void ButtonUpdateData_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
var userID = (int)dataGridView1.Rows[i].Cells[0].Value;
var userName = (string)dataGridView1.Rows[i].Cells[1].Value;
var userMonthID = (int)dataGridView1.Rows[i].Cells[2].Value;
var m = months.First(x => x.ID == userMonthID);
}
}
private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Columns[e.ColumnIndex].Name == "MonthID")
{
Users users = (Users)this.dataGridView1.CurrentRow.DataBoundItem;
var monthName = months.First(x => x.ID == users.MonthID);
}
}
}
#region Classes
public class Months
{
public int ID { get; set; }
public string Name { get; set; }
}
public class Users
{
public int ID { get; set; }
public string Name { get; set; }
public int MonthID { get; set; }
}
#endregion
}