none
在datagridview中,由于需要,设定某一列的单元格的selected属性为false,这样点击rowheader后,总是无法选中一行,该怎么解决该问题呢 RRS feed

  • 问题

  • 在datagridview中,由于需要,设定某一列的单元格的selected属性为false,这样点击rowheader后,总是无法选中一行,该怎么解决该问题呢

    //检验是否选择行
     private void button2_Click(object sender, EventArgs e)
            {
                if (this.dataGridView1.SelectedRows.Count!=1)
                {
                    MessageBox.Show("请先选中一行数据!");
                    return;
                   
                }
            }
    2009年4月30日 1:34

答案

  • 哦,这样我觉得不太好看吧,一般也不会这么做
    知识改变命运,奋斗成就人生!
    • 已标记为答案 ahking 2009年4月30日 3:04
    2009年4月30日 2:28
    版主

全部回复

  • dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    你好,设置一下属性就好了



    知识改变命运,奋斗成就人生!
    2009年4月30日 1:52
    版主
  • dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    你好,设置一下属性就好了



    知识改变命运,奋斗成就人生!


        for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
                {
                    if (this.dataGridView1[2, i] != null && this.dataGridView1[2, i].Value != null)
                    {
                        this.dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.FromArgb((int)dataGridView1.Rows[i].Cells[2].Value);
                        this.dataGridView1.Rows[i].Cells[2].Selected = false;
                        this.dataGridView1.Rows[i].Cells[2].Style.ForeColor = Color.FromArgb((int)dataGridView1.Rows[i].Cells[2].Value);
                       

                    }
                }

    还是由于需要,将以上代码放到dataGridView1_RowPrePaint事件中,结果点击行头,整行都无法选择了

    2009年4月30日 2:08
  • 把下面代码放到构造函数或Form_Load中试试
    dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

    知识改变命运,奋斗成就人生!
    2009年4月30日 2:09
    版主
  •    for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
                {
                    if (this.dataGridView1[2, i] != null && this.dataGridView1[2, i].Value != null)
                    {
                        this.dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.FromArgb((int)dataGridView1.Rows[i].Cells[2].Value);
                        this.dataGridView1.Rows[i].Cells[2].Selected = false;
                        this.dataGridView1.Rows[i].Cells[2].Style.ForeColor = Color.FromArgb((int)dataGridView1.Rows[i].Cells[2].Value);
                       

                    }
                }

     

    这部分可以放到绑定之后,


    知识改变命运,奋斗成就人生!
    2009年4月30日 2:12
    版主
  •    for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
                {
                    if (this.dataGridView1[2, i] != null && this.dataGridView1[2, i].Value != null)
                    {
                        this.dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.FromArgb((int)dataGridView1.Rows[i].Cells[2].Value);
                        this.dataGridView1.Rows[i].Cells[2].Selected = false;
                        this.dataGridView1.Rows[i].Cells[2].Style.ForeColor = Color.FromArgb((int)dataGridView1.Rows[i].Cells[2].Value);
                       

                    }
                }

     

    这部分可以放到绑定之后,


    知识改变命运,奋斗成就人生!
    这部分可以放到绑定之后的后果就是选中行后,设定颜色单元格的颜色不是原有的 ,而成了蓝色的,不要说设置选中后颜色为透明色,这会导致其他问题
    2009年4月30日 2:21
  • 你是不是想实现这样的功能? 如, 指定某一部分行的 Color 为黄色,选中后变蓝色,取消选择后再变黄色?
    知识改变命运,奋斗成就人生!
    2009年4月30日 2:24
    版主
  • 不是,设定某一列的颜色为指定的颜色,选中后不能变色啊
    2009年4月30日 2:26
  • 哦,这样我觉得不太好看吧,一般也不会这么做
    知识改变命运,奋斗成就人生!
    • 已标记为答案 ahking 2009年4月30日 3:04
    2009年4月30日 2:28
    版主
  • 哦,这样我觉得不太好看吧,一般也不会这么做
    知识改变命运,奋斗成就人生!

    不是,该列指示颜色属性值,所以在选中时也不让它变色啊
    2009年4月30日 2:30
  • 要不要考虑 在select 之后重新paint那个区域呢?
    工作突然有点忙 嘿嘿
    2009年4月30日 3:11
    版主