我想在可编辑ComboBox
的 PatientType列中使用DataGridView
。
所以我假设创建DataSet
并添加基本表"患者"和#34; PatientTypes"表也是如此。
我是否需要在DataSet
中进行更多更改才能实现目标?
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);
答案 0 :(得分:1)
不,您不需要对dataSet进行更多更改,但您需要将DataGridView设置为具有以下内容的组合框列:
我发布这个建议,尽管Fabio已经链接到一篇好的相关文章,因为该文章使用了类型化的数据集和数据格式视觉设计器,因此可能很难调整它给你的情况提供的建议
答案 1 :(得分:1)
您需要创建DataGridViewComboBoxColumn
并设置其DataSource
,HeaderText
,Name
,DataPropertyName
,ValueMember
,{{1} }属性
然后将其添加到您的datagridview' s DisplayMember
以下是代码(使用您的示例数据进行测试)
Columns
答案 2 :(得分:0)
我创建了一些示例应用,以了解它应该如何工作。 这是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
}