c# datagridview 添加 Combobox

  1. 昨天和今天在做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);
        }
    }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值