一、點擊在拖入的顯示控件(TreeList)右上方的箭頭,在Treelist任務中選擇數據源,添加項目數據源,依次選擇數據庫、數據集,新建連接,瀏覽選擇數據庫(*.mdb),依次點擊 下一步,選擇“表”,完成。
二、具體代碼如下:
#region"合並單元格(多行多列)" //需要(行、列)合並的所有列標題名 List<String> colsHeaderText_V = new List<String>(); List<String> colsHeaderText_H = new List<String>(); private void InitFormatColumns() { colsHeaderText_V.Add("PHONE1"); colsHeaderText_V.Add("PHONE2"); colsHeaderText_H.Add("IMAGEINDEX"); colsHeaderText_H.Add("PARENTID"); colsHeaderText_H.Add("DEPARTMENT"); colsHeaderText_H.Add("LOCATION"); } //繪制單元格 private void dataGridView1_CellPainting(object sender, System.Windows.Forms.DataGridViewCellPaintingEventArgs e) { foreach (string fieldHeaderText in colsHeaderText_H) { //縱向合並 if (e.ColumnIndex >= 0 && this.dataGridView1.Columns[e.ColumnIndex].HeaderText == fieldHeaderText && e.RowIndex >= 0) { using ( Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor), backColorBrush = new SolidBrush(e.CellStyle.BackColor)) { using (Pen gridLinePen = new Pen(gridBrush)) { // 擦除原單元格背景 e.Graphics.FillRectangle(backColorBrush, e.CellBounds); /****** 繪制單元格相互間隔的區分線條,datagridview自己會處理左側和上邊緣的線條,因此只需繪制下邊框和和右邊框 DataGridView控件繪制單元格時,不繪制左邊框和上邊框,共用左單元格的右邊框,上一單元格的下邊框*****/ //不是最后一行且單元格的值不為null if (e.RowIndex < this.dataGridView1.RowCount - 1 && this.dataGridView1.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value != null) { //若與下一單元格值不同 if (e.Value.ToString() != this.dataGridView1.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value.ToString()) { //下邊緣的線 e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1); //繪制值 if (e.Value != null) { e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, Brushes.Crimson, e.CellBounds.X + 2, e.CellBounds.Y + 2, StringFormat.GenericDefault); } } //若與下一單元格值相同 else { //背景顏色 //e.CellStyle.BackColor = Color.LightPink; //僅在CellFormatting方法中可用 this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.LightBlue; this.dataGridView1.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Style.BackColor = Color.LightBlue; //只讀(以免雙擊單元格時顯示值) this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly = true; this.dataGridView1.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].ReadOnly = true; } } //最后一行或單元格的值為null else { //下邊緣的線 e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1); //繪制值 if (e.Value != null) { e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, Brushes.Crimson, e.CellBounds.X + 2, e.CellBounds.Y + 2, StringFormat.GenericDefault); } } ////左側的線() //e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, // e.CellBounds.Top, e.CellBounds.Left, // e.CellBounds.Bottom - 1); //右側的線 e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1); //設置處理事件完成(關鍵點),只有設置為ture,才能顯示出想要的結果。 e.Handled = true; } } } } foreach (string fieldHeaderText in colsHeaderText_V) { //橫向合並 if (e.ColumnIndex >= 0 && this.dataGridView1.Columns[e.ColumnIndex].HeaderText == fieldHeaderText && e.RowIndex >= 0) { using ( Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor), backColorBrush = new SolidBrush(e.CellStyle.BackColor)) { using (Pen gridLinePen = new Pen(gridBrush)) { // 擦除原單元格背景 e.Graphics.FillRectangle(backColorBrush, e.CellBounds); /****** 繪制單元格相互間隔的區分線條,datagridview自己會處理左側和上邊緣的線條,因此只需繪制下邊框和和右邊框 DataGridView控件繪制單元格時,不繪制左邊框和上邊框,共用左單元格的右邊框,上一單元格的下邊框*****/ //不是最后一列且單元格的值不為null if (e.ColumnIndex < this.dataGridView1.ColumnCount - 1 && this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex + 1].Value != null) { if (e.Value.ToString() != this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex + 1].Value.ToString()) { //右側的線 e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1); //繪制值 if (e.Value != null) { e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, Brushes.Crimson, e.CellBounds.X + 2, e.CellBounds.Y + 2, StringFormat.GenericDefault); } } //若與下一單元格值相同 else { //背景顏色 //e.CellStyle.BackColor = Color.LightPink; //僅在CellFormatting方法中可用 this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.LightPink; this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex + 1].Style.BackColor = Color.LightPink; //只讀(以免雙擊單元格時顯示值) this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly = true; this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex + 1].ReadOnly = true; } } else { //右側的線 e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1); //繪制值 if (e.Value != null) { e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, Brushes.Crimson, e.CellBounds.X + 2, e.CellBounds.Y + 2, StringFormat.GenericDefault); } } //下邊緣的線 e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1); e.Handled = true; } } } } } #endregion
額外:

//添加序列號 private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { SolidBrush b = new SolidBrush(this.dataGridView1.RowHeadersDefaultCellStyle.ForeColor); e.Graphics.DrawString((e.RowIndex + 1).ToString(System.Globalization.CultureInfo.CurrentUICulture), this.dataGridView1.DefaultCellStyle.Font,b,e.RowBounds.Location.X + 20,e.RowBounds.Location.Y + 4); }