第一个 加上行号 如果可以的话 麻烦给个代码 ;
第二 个 创建了一个  datagridview 然后 隐藏了 其中数据库主键id列 如何 实现 鼠标点在form表格中的单元格 读取单元格的 id。
第三个 实现鼠标点在某行 某行中的颜色和其他的行的不一样

解决方案 »

  1.   

    关于第一个问题 我测试过 这个代码 但是不可以 ,就是说 在rowheader里没有显示序列好
    private   void   dataGridView1_RowPostPaint(object   sender,   DataGridViewRowPostPaintEventArgs   e)   
                      {   
                              using   (SolidBrush   b   =   new   SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.ForeColor))   
                              {   
                                      e.Graphics.DrawString(Convert.ToString(e.RowIndex   +   1,   System.Globalization.CultureInfo.CurrentUICulture),   e.InheritedRowStyle.Font,   b,   e.RowBounds.Location.X   +   20,   e.RowBounds.Location.Y   +   4);   
                              }   
        }
      

  2.   

    问题一:
    private void DataGridView1_CellPainting(object sender,
         DataGridViewCellPaintingEventArgs e)
     {
         if (e.ColumnIndex < 0 && e.RowIndex >= 0)
         {
            e.Paint(e.ClipBounds, DataGridViewPaintParts.All);
             Rectangle indexRect = e.CellBounds;
             indexRect.Inflate(-2, -2);
             TextRenderer.DrawText(e.Graphics,
                 (e.RowIndex + 1).ToString(),
                 e.CellStyle.Font,
                 indexRect,
                 e.CellStyle.ForeColor,
                 TextFormatFlags.Right | TextFormatFlags.VerticalCenter);
             e.Handled = true;
         }
     } }
    问题二:在点击事件中直接读取。
    问题三:在CellClick事件中循环设置(i为各列的Index),如:
    DataGridView1.Rows(e.RowIndex).Cells(i).Style.BackColor = Color.White
      

  3.   

    第二个问题 textBox1.Text = this.dataGridView1.CurrentRow.Cells[0].Value.ToString();
    用这个读取的话 因为第一列 的id被隐藏了,所以读取的是表中第二列的数据 不是主键,
    那怎么读取啊 ?
      

  4.   

    第二个问题我想了个办法,就是从数据表里拖一个 idtextbox出来 这个显示的每行的 id 然后 引用这个 id做到了。有没有更加简单点的做法?
      

  5.   

    问题一: 
    private void DataGridView1_CellPainting(object sender, 
        DataGridViewCellPaintingEventArgs e) 

        if (e.ColumnIndex < 0 && e.RowIndex >= 0) 
        { 
            e.Paint(e.ClipBounds, DataGridViewPaintParts.All); 
            Rectangle indexRect = e.CellBounds; 
            indexRect.Inflate(-2, -2); 
            TextRenderer.DrawText(e.Graphics, 
                (e.RowIndex + 1).ToString(), 
                e.CellStyle.Font, 
                indexRect, 
                e.CellStyle.ForeColor, 
                TextFormatFlags.Right | TextFormatFlags.VerticalCenter); 
            e.Handled = true; 
        } 
    } } 
    问题二:在点击事件中直接读取。 
    问题三:在CellClick事件中循环设置(i为各列的Index),如: 
    DataGridView1.Rows(e.RowIndex).Cells(i).Style.BackColor = Color.White
      

  6.   

    第一个问题在VB.NET中是通过的,C#不熟。参考下出处:
    http://bingning.net/free/source/datagridview/drawrownumber.html
    第二个问题可以读取相应DataSet中的ID,类似你的办法。
      

  7.   

    我只说第二个问题:
    首先,表格的数据源用bindingSource
    其次,在bindingSource的PositionChanged事件中调用下面代码得到DataRow行,然后就可以得到你想要的数据了DataRow["id"].
                if (bindingSource1.Current != null && bindingSource1.Current as DataRowView!=null)
                    Dr = (bindingSource1.Current as DataRowView).Row as DataRow;http://www.mystruggle.com.cn
      

  8.   

    比如说 当点击表格 得到 id后  传给一个 textbox1 显示出来。
      

  9.   

    http://www.bbs180.com/topictag-16.aspx
      

  10.   

                sqlDataAdapter_create.Fill(dataSet2, "main_666666");
                bindingSource1.DataSource = dataSet2;
                bindingSource1.DataMember = "main_666666";
                dataGridView1.DataSource = bindingSource1;
                bindingSource1.PositionChanged += ((object sender1, EventArgs e1) =>
                {
                    if (bindingSource1.Current != null && bindingSource1.Current as DataRowView != null)
                       { Dr = (bindingSource1.Current as DataRowView).Row as DataRow;
                    textBox1.Text = Dr["id"].ToString();}            });
    }或
                sqlDataAdapter_create.Fill(dataSet2, "main_666666");
                bindingSource1.DataSource = dataSet2;
                bindingSource1.DataMember = "main_666666";
                dataGridView1.DataSource = bindingSource1;
                bindingSource1.PositionChanged +=new EventHandler(bindingSource1_PositionChanged);
    }        private void bindingSource1_PositionChanged(object sender, EventArgs e)
    {
                  if (bindingSource1.Current != null && bindingSource1.Current as DataRowView != null)
    {
                        Dr = (bindingSource1.Current as DataRowView).Row as DataRow;
                    textBox1.Text = Dr["id"].ToString();
    }
    }http://www.mybuffet.cn
      

  11.   

    谢谢wangminqi  
    private void bindingSource1_PositionChanged(object sender, EventArgs e) 

                  if (bindingSource1.Current != null && bindingSource1.Current as DataRowView != null) 

                        Dr = (bindingSource1.Current as DataRowView).Row as DataRow; 
                    textBox1.Text = Dr["id"].ToString(); 


     这段代码我明白了 
    我想问一下 
       sqlDataAdapter_create.Fill(dataSet2, "main_666666"); 
                bindingSource1.DataSource = dataSet2; 
                bindingSource1.DataMember = "main_666666"; 
                dataGridView1.DataSource = bindingSource1; 
                bindingSource1.PositionChanged += ((object sender1, EventArgs e1) => 
                { 
                    if (bindingSource1.Current != null && bindingSource1.Current as DataRowView != null) 
                      { Dr = (bindingSource1.Current as DataRowView).Row as DataRow; 
                    textBox1.Text = Dr["id"].ToString();}             }); 

    这段代码什么意思  为什么我测试的时候提示有错误
      

  12.   

    问题一
       protected override void OnRowsAdded(System.Windows.Forms.DataGridViewRowsAddedEventArgs e)
            {
                base.OnRowsAdded(e);
                if (Rows.Count > 0)
                {                for (int i = 0; i < this.Rows.Count; i++)
                    {
                        this.Rows[i].HeaderCell.Value = (i + 1).ToString();
                    }            }
            }
            protected override void OnColumnHeaderMouseClick(System.Windows.Forms.DataGridViewCellMouseEventArgs e)
            {
                base.OnColumnHeaderMouseClick(e);
                if (Rows.Count > 0)
                {                for (int i = 0; i < this.Rows.Count; i++)
                    {
                        this.Rows[i].HeaderCell.Value = (i + 1).ToString();
                    }
                 
                }
            }
      

  13.   

    问题二
    如果你没有用绑定来做的话
    可以考虑把列ID或其他有用但是不必显示的数据存在dataRow.tag中
      

  14.   

    回复 geyunfei_hit    错误 1 “cs.Form2.OnRowsAdded(System.Windows.Forms.DataGridViewRowsAddedEventArgs)”: 没有找到适合的方法来重写 F:\个人文档\人力资源软件\ceshiruanjian\cs\cs\Form2.cs 118 33 cs错误 2 “cs.Form2.OnColumnHeaderMouseClick(System.Windows.Forms.DataGridViewCellMouseEventArgs)”: 没有找到适合的方法来重写 F:\个人文档\人力资源软件\ceshiruanjian\cs\cs\Form2.cs 131 33 cs
     是不是我哪里操作不对啊 ?
      

  15.   

    啊,不好意思,我这里是用继承DataGridView控件的方法,你可以用类似的方式处理事件就可以了
      

  16.   

    问题一:
    定义一个数据表,DATATABLE,用其属性加序号。
      

  17.   


    你可以只用
    sqlDataAdapter_create.Fill(dataSet2, "main_666666");
                bindingSource1.DataSource = dataSet2;
                bindingSource1.DataMember = "main_666666";
                dataGridView1.DataSource = bindingSource1;
                bindingSource1.PositionChanged +=new EventHandler(bindingSource1_PositionChanged);
    }        private void bindingSource1_PositionChanged(object sender, EventArgs e)
    {
                  if (bindingSource1.Current != null && bindingSource1.Current as DataRowView != null)
    {
                        Dr = (bindingSource1.Current as DataRowView).Row as DataRow;
                    textBox1.Text = Dr["id"].ToString();
    }
    } 另一段只是另一种写法:lambda expression 只有在3.0以上才可以,还要引用一些单元。http://www.mybuffet.cn
      

  18.   

    已解决 第二个问题 由 wangminqi 提供。本人贴上 正解,给后来的后朋友一个才考 每段代码后面 wangminqi 又给上了 注解,有帮助学习,结贴以后一起给分,万分感谢//为了给那些像我一样出血的看的更明白 我这里再补充一点点,那就是,如果你复制本代码后请更改以下数据pbasicinfoBindingSource-----》更改成你程序里的bindingsource;;p_basicinfo----》改成你自己的查询表;rlzyDataSet1-------》更改成你自己的dataset; this.p_basicinfoTableAdapter------》你自己的tableadapter;      不要忘记申明      private DataRow Dr;
    namespace cs
    {
        public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();        }
            private DataRow Dr;        private void Form3_Load(object sender, EventArgs e)
            {
                // TODO: 这行代码将数据加载到表“rlzyDataSet1.p_basicinfo”中。您可以根据需要移动或移除它。
                this.p_basicinfoTableAdapter.Fill(this.rlzyDataSet1.p_basicinfo);  //填充数据集
                pbasicinfoBindingSource.DataSource = rlzyDataSet1;  //pbasicinfoBindingSource用rlzyDataSet1作数据源
                pbasicinfoBindingSource.DataMember = "p_basicinfo";
                dataGridView1.DataSource = pbasicinfoBindingSource; //用pbasicinfoBindingSource作数据源 
                pbasicinfoBindingSource.PositionChanged += new EventHandler(bindingSource1_PositionChanged); //加事件PositionChanged        }
            private void bindingSource1_PositionChanged(object sender, EventArgs e)
            {
                if (pbasicinfoBindingSource.Current != null && pbasicinfoBindingSource.Current as DataRowView != null)
                //pbasicinfoBindingSource.Current 是个 DataRowView 类型指示当前行
                {
                    Dr = (pbasicinfoBindingSource.Current as DataRowView).Row as DataRow; //把当前行又转换为DataRow 行集
                    textBox1.Text = Dr["id"].ToString();//读id字段
                }
            }    }
    }
      

  19.   

    //关于行号,很麻烦,不知是否有意义
            int maxhh = 0;        private void Form1_Load(object sender, EventArgs e)
            {
                //“hh” 为行号 ,table要手动加入列,包括"hh"
                sqlDataAdapter1.Fill(dataSet1.Tables[0] );
                int i=1;
                dataSet1.Tables[0].Columns["hh"].ReadOnly = false;
                foreach (DataRow r in dataSet1.Tables[0].Rows)
                {
                    r["hh"] = i;
                    maxhh = i;
                        i++;
                }
                dataSet1.Tables[0].Columns["hh"].ReadOnly = true ;
                dataSet1.Tables[0].TableNewRow += new DataTableNewRowEventHandler(Form1_TableNewRow);
                dataSet1.Tables[0].RowDeleted += new DataRowChangeEventHandler(Form1_RowDeleted);         }        void Form1_RowDeleted(object sender, DataRowChangeEventArgs e)
            {
                //重整行号,使行号连续
                int i = 1;
                dataSet1.Tables[0].Columns["hh"].ReadOnly = false;
                foreach (DataRow r in dataSet1.Tables[0].Rows)
                {
                    if (r.RowState != DataRowState.Deleted)
                    {
                        r["hh"] = i;
                        maxhh = i;
                        i++;
                    }
                }
                dataSet1.Tables[0].Columns["hh"].ReadOnly = true;        }        void Form1_TableNewRow(object sender, DataTableNewRowEventArgs e)
            {
                dataSet1.Tables[0].Columns["hh"].ReadOnly = false;
                maxhh++;
                e.Row["hh"] = maxhh; 
                dataSet1.Tables[0].Columns["hh"].ReadOnly = true;
            }http://www.mystruggle.com.cn