Winform DataGridView控件添加行號


 

 

有很多種方法,這里介紹三種:

A:

控件的RowStateChanged事件中添加,RowStateChanged事件是在行的狀態更改(例如,失去或獲得輸入焦點)時發生的事件:

1 e.Row.HeaderCell.Value = (e.Row.Index + 1).ToString();//添加行號
2 
3 //e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1);

B:

使用控件的RowPostPaint事件,RowPostPaint事件是在繪制 System.Windows.Forms.DataGridViewRow (所有單元格繪制,執行了行繪制之后)發生的事件,不過使用RowPostPaint事件這種方法在數據量很大的時候性能比較差,每次滾動數據都會觸發RowPostPaint事件,繪制行號。

(主要利用TextRenderer.DrawText()方法,使用指定的設備上下文、字體、顏色和格式說明在指定界限中繪制指定文本。)

1         private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
2         {
3             //添加行號
4             System.Drawing.Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Y, this.dataGridView1.RowHeadersWidth - 4, e.RowBounds.Height);
5             TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), this.dataGridView1.RowHeadersDefaultCellStyle.Font, rectangle, this.dataGridView1.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right);//”TextFormatFlags.VerticalCenter | TextFormatFlags.Right“中“|”有增加的作用,此處添加了兩種文本字符格式樣式
6             //this.dataGridView1.RowHeadersDefaultCellStyle.BackColor = Color.FromArgb(192, 192, 255);//行標題單元格BackColor
7             //this.dataGridView1.RowHeadersDefaultCellStyle.BackColor = SystemColors.Control;
8         }

B)2): 

 1         private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
 2         {
 3             var rowIdx = (e.RowIndex + 1).ToString();
 4             var centerFormat = new StringFormat()
 5             {
 6                 Alignment = StringAlignment.Center,
 7                 LineAlignment = StringAlignment.Center,
 8             };
 9             var headerBounds = new Rectangle(e.RowBounds.Left, e.RowBounds.Top, dataGridView1.RowHeadersWidth, e.RowBounds.Height);
10             e.Graphics.DrawString(rowIdx, this.Font, SystemBrushes.ControlText, headerBounds, centerFormat);
11         }
View Code

 

C:

在控件的RowsAdded事件和RowsRemoved事件中添加代碼。

RowsAdded事件是 在向 System.Windows.Forms.DataGridView 中添加新行之后發生。

 1         private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
 2         {
 3 
 4             for (int i = 0; i < e.RowCount; i++)
 5             {
 6                 dataGridView1.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
 7                 dataGridView1.Rows[e.RowIndex + i].HeaderCell.Value = (e.RowIndex + i + 1).ToString();
 8             }
 9 
10             for (int i = e.RowIndex + e.RowCount; i < this.dataGridView1.Rows.Count; i++)
11             {
12                 dataGridView1.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
13                 dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
14             }
15         }

 
RowsRemoved事件是 在從 System.Windows.Forms.DataGridView 中刪除一行或多行時發生。

 1 private void dataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
 2         {
 3             for (int i = 0; i < e.RowCount; i++)
 4             {
 5                 dataGridView1.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
 6                 dataGridView1.Rows[e.RowIndex + i].HeaderCell.Value = (e.RowIndex + i + 1).ToString();
 7             }
 8 
 9             for (int i = e.RowIndex + e.RowCount; i < this.dataGridView1.Rows.Count; i++)
10             {
11                 dataGridView1.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
12                 dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
13             }
14         }

 

注:DataGridView控件的RowsHeaderWidthSizeMode屬性可以設置如何調整行標題寬度,設置為AutoSizeToAllHeaders或者AutoSizeToDisplayedHeaders,會自動設置寬度不會出現行指示符擠壓行號的情況。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM