- 昨天和今天在做c# datagridview DataGridViewComboBoxColumn,为什么做了这么久,因为是总想使用datatable作为datasource进行绑定到DataGridViewComboBoxColumn上,但是实际上不能这样,而是datasource就是数据,DataGridViewComboBoxColumn只是datagridview在绑定数据后,添加到其中,它里面的数据设置值,在datasource中获取,按照某种规则,放进去即可
public partial class Form5 : Form
{
public Form5()
{
InitializeComponent();
}
private void Form5_Load(object sender, EventArgs e)
{
initDataGridView();
}
private void initDataGridView()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("序号1"));
dt.Columns.Add(new DataColumn("序号2"));
dt.Columns.Add(new DataColumn("序号3"));
dt.Columns.Add(new DataColumn("序号4")); //这列隐藏
this.dataGridView1.DataSource = dt; //先给了datasource,然后再增加combobox列,列的数据在理论上不能通过datasource绑定,所以不需要绑定
DataGridViewComboBoxColumn rtuCombobox = new DataGridViewComboBoxColumn();
rtuCombobox.Name = "rtucombobox";
rtuCombobox.DataPropertyName = "Type";
rtuCombobox.HeaderText = "协议类型";
rtuCombobox.DefaultCellStyle.NullValue = "";
DgvCombobox(ref rtuCombobox);//此方法是定义的关键
dataGridView1.Columns.AddRange(new DataGridViewColumn[] { rtuCombobox });
dataGridView1.AllowUserToAddRows = false; //增加了这些,不会显示多余的行
dataGridView1.AllowUserToDeleteRows = false;
dataGridView1.Columns[3].Visible = false; //隐藏列
}
private void DgvCombobox(ref DataGridViewComboBoxColumn rtuCombobox)
{
//DataGridViewComboBoxColumn 可以按照combobox来设置值s
string[] protocols = {"未启用","A11协议","长庆协议" };
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("text", typeof(string));
dt.Columns.Add(dc);
dt.Columns.Add(new DataColumn("ID", typeof(int)));
for (int i = 0; i < protocols.Length; i++) {
DataRow dr = dt.NewRow();
dr["text"] = protocols[i];
dr["ID"] = i;
dt.Rows.Add(dr);
}
rtuCombobox.DataSource = dt;
rtuCombobox.DisplayMember = "text";
rtuCombobox.ValueMember = "ID";
//rtuCombobox.ValueMember = dt.Columns[1].ToString();
}
private void button1_Click(object sender, EventArgs e)
{
DataTable dt = dataGridView1.DataSource as DataTable;
//先设置了datasource
for (int i = 0; i < 20; i++)
{
DataRow dr = dt.NewRow();
dr[0] = i + 1;
dr[1] = "戴尔笔记本";
dr[2] = "00000" + (i + 1).ToString();
//dr[3] = 1;
dt.Rows.Add(dr);
}
//combobox的值,单独设置,这个值,可以从datasoruce中取得,然后按照某种规则,给combobox赋值
for (int i = 0; i < 20; i++) {
this.dataGridView1.Rows[i].Cells[4].Value = i%3;
}
//for (int i = 0; i < 10; i++) {
// //Object[] params1 = { i+1, "戴尔笔记本", "00000" + (i + 1).ToString(),1 };
// //dataGridView1.Rows.Add(params1);
// dataGridView1.Rows.Add();
// this.dataGridView1.Rows[i].Cells[0].Value =i+1;
// this.dataGridView1.Rows[i].Cells[1].Value = "戴尔笔记本";
//}
}
private void button2_Click(object sender, EventArgs e)
{
DataTable dt = dataGridView1.DataSource as DataTable;
dt.Clear();
}
private void button3_Click(object sender, EventArgs e)
{
MessageBox.Show("this.dataGridView1.Rows[0].Cells[0].Value="+ this.dataGridView1.Rows[0].Cells[0].Value);
MessageBox.Show("this.dataGridView1.Rows[0].Cells[1].Value=" + this.dataGridView1.Rows[0].Cells[1].Value);
MessageBox.Show("this.dataGridView1.Rows[0].Cells[2].Value=" + this.dataGridView1.Rows[0].Cells[2].Value);
MessageBox.Show("this.dataGridView1.Rows[0].Cells[3].Value=" + this.dataGridView1.Rows[0].Cells[3].Value);
MessageBox.Show("this.dataGridView1.Rows[0].Cells[4].Value=" + this.dataGridView1.Rows[0].Cells[4].Value);
MessageBox.Show("this.dataGridView1.Rows[0].Cells[4].ToString()=" + this.dataGridView1.Rows[0].Cells[4].ToString());
MessageBox.Show("this.dataGridView1.Rows[0].Cells[4].ToolTipText()=" + this.dataGridView1.Rows[0].Cells[4].ToolTipText);
}
}