在Datagrid中第一列要求新增一条自动加一,这个到容易实现;
可是要求删除中间记录后,要重新从1排序。
请教大家。

解决方案 »

  1.   

    用行的索引就可以了,这个DataGriD是准确的了,实现上最好是自定义一个RowNumber的列,取值上就取所在行的索引就行了.
      

  2.   

    谢谢:hbxtlhx(平民百姓)取所在行的索引就行了,怎样取呀?
      

  3.   

    自定义一个DataGrid列的时候在这个列里就应该可以获取了.
      

  4.   

    参见这个代码:
    /// <summary>
    /// 行号列
    /// </summary>
    public class RowNumberColumnStyle : DataGridTextBoxColumn
    {
    private int nSelectedRowIndex;
    protected override object GetColumnValueAtRow(CurrencyManager source, int rowNum)
    {
    return rowNum + 1;
    }
    protected override void SetColumnValueAtRow(CurrencyManager source, int rowNum, object value)
    {
    base.SetColumnValueAtRow (source, rowNum, rowNum + 1);
    }
    protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
    {
    if (source.List!=null)
    {
    if (nSelectedRowIndex > -1 && nSelectedRowIndex < source.List.Count)
    {
    this.DataGridTableStyle.DataGrid.UnSelect(nSelectedRowIndex);
    }
    }
    this.DataGridTableStyle.DataGrid.Select(rowNum);
    nSelectedRowIndex = rowNum;
    }
    protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
    {
    Rectangle rect = bounds;
    object objValue = rowNum + 1; g.FillRectangle(backBrush,rect);
    rect.Offset(0, 2);
    rect.Height -= 2;
    StringFormat sf = new StringFormat();
    sf.Alignment = StringAlignment.Center;
    g.DrawString(objValue.ToString(), this.DataGridTableStyle.DataGrid.Font, foreBrush, rect, sf);
    }
    }