none
datagridview在绑定的前提下,怎样设置第一列自动添加序号,第二列单元格颜色为数据的对应的颜色 RRS feed

答案

  • 第一列为自动序号,可在绑定的datatable中添加一列,把序号加进去.
    第二列颜色 可以用下面代码实现
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    dataGridView1.Rows[i].Cells[0].Style.BackColor = Color.FromName(dataGridView1.Rows[i].Cells[1].Value.ToString());
                }

    山西.net俱乐部
    2009年4月16日 9:05
    版主

全部回复

  • datagridview在绑定的前提下,怎样设置第一列自动添加序号,第二列单元格颜色为数据的对应的颜色

    可能没说清楚,数据源里的第二列的值为red,blue等字符,datagridview的第二列的单元格的颜色则为相应的颜色,而不是显示red,blue等字符
    2009年4月16日 6:47
  •  private void Form1_Load(object sender, EventArgs e)
            {
                this.dataGridView1.RowPostPaint += new DataGridViewRowPostPaintEventHandler(dataGridView1_RowPostPaint);
                this.dataGridView1.DataSource = Data.Northwind.GetProducts();
                this.BuildColor();
            }

            private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
            {
                // 行号
                SolidBrush B = new SolidBrush(Color.Black);
                e.Graphics.DrawString((e.RowIndex + 1).ToString(), e.InheritedRowStyle.Font, B, e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4);
            }

            /// <summary>
            /// 自定单元格颜色
            /// </summary>
            private void BuildColor()
            {
                for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
                {
                    if (this.dataGridView1[0, i] != null && this.dataGridView1[0, i].Value != null)
                    {
                        // 根据条件设置不同的颜色
                        if (this.dataGridView1[0, i].Value.ToString() == "1")
                            this.dataGridView1[0, i].Style.BackColor = Color.Blue;
                        else if (this.dataGridView1[0, i].Value.ToString() == "10")
                            this.dataGridView1[0, i].Style.BackColor = Color.Yellow;
                    }
                }
                
            }

    知识改变命运,奋斗成就人生!
    2009年4月16日 6:54
    版主
  •  /// <summary>
            /// 自定单元格颜色
            /// </summary>
            private void BuildColor()
            {
                for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
                {
                    if (this.dataGridView1[0, i] != null && this.dataGridView1[0, i].Value != null)
                    {
                        // 根据条件设置不同的颜色
                        if (this.dataGridView1[0, i].Value.ToString() == "1")
                        {
                            // 背景和前景都设成一样就达到你要的效果了
                            this.dataGridView1[0, i].Style.BackColor = Color.Blue;
                            this.dataGridView1[0, i].Style.ForeColor = Color.Blue;
                        }
                        else if (this.dataGridView1[0, i].Value.ToString() == "10")
                        {
                            this.dataGridView1[0, i].Style.BackColor = Color.Yellow;
                            this.dataGridView1[0, i].Style.ForeColor = Color.Yellow;
                        }
                    }
                }
                
            }

    知识改变命运,奋斗成就人生!
    2009年4月16日 6:58
    版主
  • 第一列为自动序号,可在绑定的datatable中添加一列,把序号加进去.
    第二列颜色 可以用下面代码实现
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    dataGridView1.Rows[i].Cells[0].Style.BackColor = Color.FromName(dataGridView1.Rows[i].Cells[1].Value.ToString());
                }

    山西.net俱乐部
    2009年4月16日 9:05
    版主
  • 第一列为自动序号,可在绑定的datatable中添加一列,把序号加进去.
    第二列颜色 可以用下面代码实现
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    dataGridView1.Rows[i].Cells[0].Style.BackColor = Color.FromName(dataGridView1.Rows[i].Cells[1].Value.ToString());
                }

    山西.net俱乐部

    现在有个问题,把上述代码加入到paint或别的事件中,如果该行处于选中状态,拖动颜色这列改变列宽,都会出现该单元格被相邻的单元格内容覆盖的现象,该怎么解决呢?
    2009年4月17日 9:02
  • 顶一下,内容覆盖的 问题
    2009年4月19日 2:27
  • 还有,在别的窗口挡住设定颜色的单元格的时候,移开该窗口,单元格背景色就成了窗口的图案了
    2009年4月20日 3:06
  • 楼主,你好

    关于自动添加序号你可以直接采用如下方式绑定即可。
    <asp:TemplateField HeaderText="Index">
                        <ItemTemplate>
                            <%#((GridViewRow)(Container)).RowIndex %>
                        </ItemTemplate>                   
     </asp:TemplateField>

    对于设置背景颜色的问题,我利用下面的函数在grideview绑定后调用 它改变背景颜色没有发现你说的问题。
     protected void ChangeBackgroundColor()
        {
            foreach (GridViewRow  gvr in this.GridView1.Rows)
            {
                gvr.Cells[3].BackColor = System.Drawing.Color.FromName(gvr.Cells[3].Text);
            }
        }


    Microsoft Online Community Support
    2009年4月20日 8:01
  • 楼主,你好

    关于自动添加序号你可以直接采用如下方式绑定即可。
    <asp:TemplateField HeaderText="Index">
                        <ItemTemplate>
                            <%#((GridViewRow)(Container)).RowIndex %>
                        </ItemTemplate>                   
     </asp:TemplateField>

    对于设置背景颜色的问题,我利用下面的函数在grideview绑定后调用 它改变背景颜色没有发现你说的问题。
     protected void ChangeBackgroundColor()
        {
            foreach (GridViewRow  gvr in this.GridView1.Rows)
            {
                gvr.Cells[3].BackColor = System.Drawing.Color.FromName(gvr.Cells[3].Text);
            }
        }


    Microsoft Online Community Support

    是在winform下,确实有该问题,我试过好几次了啊
    2009年4月20日 8:39
  • 只是在该行处于选中状态时会发生这种现象
    2009年4月21日 9:07
  • 为了使该单元格在选中后,变成蓝底白字,设置selectionbackcolor为透明,就出现了上述情况,怎么解决啊?!
    2009年4月22日 11:36