代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_C#

[WinForm]DataGridview 和 ComboBox 有关,该怎么处理

发布时间:2019-09-19浏览(2101)

    [WinForm]DataGridview 和 ComboBox 有关
    ID Name 。。。。。

    第一列是DataGridViewComboBoxColumn

    能否根据第一列下拉选项变化时 触发事件,
    让第二列textbox内容和只读属性跟着变化

    不知道我表达明白没,谢谢

    ------解决方案--------------------
    绑定数据源
    DataTable dts = new DataTable();
    dts.Columns.Add("sSex");
    dts.Columns.Add("sName");
    for (int i = 0; i < 10; i++)
    {
    DataRow dr2=dts.NewRow();
    if (i < 5)
    dr2[0] = "男";
    else
    dr2[0] = "女";
    dr2[1] = i.ToString();
    dts.Rows.Add(dr2);
    }

    this.dataGridView1.AutoGenerateColumns = false;
    this.dataGridView1.DataSource = dts;

    DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
    col.DataPropertyName = "sSex";
    col.HeaderText = "性别";
    DataTable dt = new DataTable();
    dt.Columns.Add("sexname");
    dt.Columns.Add("sexvalue");
    DataRow dr = dt.NewRow();
    dr[0] = "男";
    dr[1] = "男";
    dt.Rows.Add(dr);
    DataRow dr1 = dt.NewRow();
    dr1[0] = "女";
    dr1[1] = "女";
    dt.Rows.Add(dr1);

    col.DataSource = dt;
    col.ValueMember = "sexvalue";
    col.DisplayMember = "sexname";
    this.dataGridView1.Columns.Add(col);

    DataGridViewTextBoxColumn cols = new DataGridViewTextBoxColumn();
    cols.DataPropertyName = "sName";
    cols.HeaderText = "名称";
    this.dataGridView1.Columns.Add(cols);

    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
    DataGridViewRow dgr = this.dataGridView1.Rows[e.RowIndex];
    if (dgr.Cells[0].Value.ToString() == "男")
    {
    dgr.Cells[1].ReadOnly = true;
    dgr.Cells[1].Value = "男的";
    }
    else
    {
    dgr.Cells[1].ReadOnly = false;
    dgr.Cells[1].Value = "女的";
    }
    }
    ------解决方案--------------------
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 

    DataGridViewRow dgr = this.dataGridView1.Rows[e.RowIndex]; 
    if (dgr.Cells[0].Value.ToString() == "男") 

    dgr.Cells[1].ReadOnly = true; 
    dgr.Cells[1].Value = "男的"; 

    else 

    dgr.Cells[1].ReadOnly = false; 
    dgr.Cells[1].Value = "女的"; 

    }
    ------解决方案--------------------
    可以在DataGridView.EditingControlShowing 事件中处理 

    举例 
    C# code
    
    private void dataGridView1_EditingControlShowing(object sender, 
                        DataGridViewEditingControlShowingEventArgs e)
    {
        ComboBox cb = e.Control as ComboBox;
        if (cb != null)
        {
            // first remove event handler to keep from attaching multiple:
            cb.SelectedIndexChanged -= new
            EventHandler(cb_SelectedIndexChanged);
    
            // now attach the event handler
            cb.SelectedIndexChanged += new 
            EventHandler(cb_SelectedIndexChanged);
        }
    }
    
    void cb_SelectedIndexChanged(object sender, EventArgs e)
    {
        MessageBox.Show("Selected index changed");
    }