DataGridVIew的使用学习

1.自定义单元格Cell类型:以定义一个DataGridViewDateTimePickerColumn为例(源码来自CodeProject)。

自定义DataGridViewDateTimePickerColumn
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Windows.Forms;
  6 
  7 namespace NtControls
  8 {
  9    public class DataGridViewDateTimePickerColumn:DataGridViewColumn
 10     {
 11         public DataGridViewDateTimePickerColumn()
 12                 : base(new CalendarCell())
 13             {
 14             }
 15 
 16             public override DataGridViewCell CellTemplate
 17             {
 18                 get
 19                 {
 20                     return base.CellTemplate;
 21                 }
 22                 set
 23                 {
 24                     if (value != null &&
 25                         !value.GetType().IsAssignableFrom(typeof(CalendarCell)))
 26                     {
 27                         throw new InvalidCastException("Must be a CalendarCell");
 28                     }
 29                     base.CellTemplate = value;
 30                 }
 31             }
 32     }
 33     public class CalendarCell : DataGridViewTextBoxCell
 34     {
 35 
 36         public CalendarCell()
 37             : base()
 38         {
 39             // Use the short date format.
 40             this.Style.Format = "d";
 41         }
 42 
 43         public override void InitializeEditingControl(int rowIndex, object
 44             initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
 45         {
 46             // Set the value of the editing control to the current cell value.
 47             base.InitializeEditingControl(rowIndex, initialFormattedValue,
 48                 dataGridViewCellStyle);
 49             CalendarEditingControl ctl =
 50                 DataGridView.EditingControl as CalendarEditingControl;
 51 
 52             if (this.Value != System.DBNull.Value)
 53             {
 54                 ctl.Value = (DateTime)this.Value;
 55             }
 56 
 57         }
 58 
 59         public override Type EditType
 60         {
 61             get
 62             {
 63                 // Return the type of the editing contol that CalendarCell uses.
 64                 return typeof(CalendarEditingControl);
 65             }
 66         }
 67 
 68         public override Type ValueType
 69         {
 70             get
 71             {
 72                 // Return the type of the value that CalendarCell contains.
 73                 return typeof(DateTime);
 74             }
 75         }
 76 
 77         public override object DefaultNewRowValue
 78         {
 79             get
 80             {
 81                 // Use the current date and time as the default value.
 82                 return DateTime.Now;
 83             }
 84         }
 85     }
 86 
 87     class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
 88     {
 89         DataGridView dataGridView;
 90         private bool valueChanged = false;
 91         int rowIndex;
 92 
 93         public CalendarEditingControl()
 94         {
 95             this.Format = DateTimePickerFormat.Short;
 96         }
 97 
 98         // Implements the IDataGridViewEditingControl.EditingControlFormattedValue 
 99         // property.
100         public object EditingControlFormattedValue
101         {
102             get
103             {
104                 return this.Value.ToShortDateString();
105             }
106             set
107             {
108                 if (value is String)
109                 {
110                     this.Value = DateTime.Parse((String)value);
111                 }
112             }
113         }
114 
115         // Implements the 
116         // IDataGridViewEditingControl.GetEditingControlFormattedValue method.
117         public object GetEditingControlFormattedValue(
118             DataGridViewDataErrorContexts context)
119         {
120             return EditingControlFormattedValue;
121         }
122 
123         // Implements the 
124         // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.
125         public void ApplyCellStyleToEditingControl(
126             DataGridViewCellStyle dataGridViewCellStyle)
127         {
128             this.Font = dataGridViewCellStyle.Font;
129             this.CalendarForeColor = dataGridViewCellStyle.ForeColor;
130             this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;
131         }
132 
133         // Implements the IDataGridViewEditingControl.EditingControlRowIndex 
134         // property.
135         public int EditingControlRowIndex
136         {
137             get
138             {
139                 return rowIndex;
140             }
141             set
142             {
143                 rowIndex = value;
144             }
145         }
146 
147         // Implements the IDataGridViewEditingControl.EditingControlWantsInputKey 
148         // method.
149         public bool EditingControlWantsInputKey(
150             Keys key, bool dataGridViewWantsInputKey)
151         {
152             // Let the DateTimePicker handle the keys listed.
153             switch (key & Keys.KeyCode)
154             {
155                 case Keys.Left:
156                 case Keys.Up:
157                 case Keys.Down:
158                 case Keys.Right:
159                 case Keys.Home:
160                 case Keys.End:
161                 case Keys.PageDown:
162                 case Keys.PageUp:
163                     return true;
164                 default:
165                     return false;
166             }
167         }
168 
169         // Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit 
170         // method.
171         public void PrepareEditingControlForEdit(bool selectAll)
172         {
173             // No preparation needs to be done.
174         }
175 
176         // Implements the IDataGridViewEditingControl
177         // .RepositionEditingControlOnValueChange property.
178         public bool RepositionEditingControlOnValueChange
179         {
180             get
181             {
182                 return false;
183             }
184         }
185 
186         // Implements the IDataGridViewEditingControl
187         // .EditingControlDataGridView property.
188         public DataGridView EditingControlDataGridView
189         {
190             get
191             {
192                 return dataGridView;
193             }
194             set
195             {
196                 dataGridView = value;
197             }
198         }
199 
200         // Implements the IDataGridViewEditingControl
201         // .EditingControlValueChanged property.
202         public bool EditingControlValueChanged
203         {
204             get
205             {
206                 return valueChanged;
207             }
208             set
209             {
210                 valueChanged = value;
211             }
212         }
213 
214         // Implements the IDataGridViewEditingControl
215         // .EditingPanelCursor property.
216         public Cursor EditingPanelCursor
217         {
218             get
219             {
220                 return base.Cursor;
221             }
222         }
223 
224         protected override void OnValueChanged(EventArgs eventargs)
225         {
226             // Notify the DataGridView that the contents of the cell
227             // have changed.
228             valueChanged = true;
229             this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
230             base.OnValueChanged(eventargs);
231         }
232     }
233 }
调用的代码:
1 DataGridViewDateTimePickerColumn ColdatePicker = new DataGridViewDateTimePickerColumn(); 2 ColdatePicker.DataPropertyName = "gg";//绑定一个时间类型的数据字段 3 ColdatePicker.HeaderText = "时间"; 4 ColdatePicker.Name = "ColdatePicker";

2.手工创建Column后绑定数据(不做介绍) 

3.让DataGridView奇数行和偶数行以不同的颜色显示

1 DataGridViewCellStyle dataGridViewCellStyle1 =new DataGridViewCellStyle();
2             dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
3             dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
4             this.dataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;

4.选择RowHeader,右击弹出菜单

 1  private void dgvRegionStatistic_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
 2         {
 3             if (e.Button==MouseButtons.Left)
 4             {
 5                 //dgvRegionStatistic.s(e.RowIndex);
 6             }
 7             else if (e.Button==MouseButtons.Right)
 8             {
 9                 dgvRegionStatistic.Rows[e.RowIndex].Selected = true;
10                 ContextMenuStrip munu = contextMenuStrip1;
11                 munu.Show(MousePosition.X, MousePosition.Y);
12             }
13         }

5.Drill表中字段StraId(int)依赖于Stra表中主键ID(int),查询Drill表显示地层信息为Stra表中的Stra_name字段。

View Code
 1  private DataTable GetTable(string sql)
 2         {
 3             string strConn = global::NcControls.Properties.Settings.Default.geoConnString;
 4             using (OleDbConnection sqlconn = new OleDbConnection(strConn))
 5             {
 6                 DataTable dt = new DataTable();
 7                 OleDbDataAdapter sqlda = new OleDbDataAdapter(sql, sqlconn);
 8                 sqlda.Fill(dt);
 9                 return dt;
10             }
11         }
12 
13         private void frmDrill_Load(object sender, EventArgs e)
14         {
15             dataGridView1.AutoGenerateColumns = false;
16             dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
17             dataGridView1.ColumnHeadersHeight = 48;
18        dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;//鼠标点击一次就可以修改
19             dataGridView1.AllowUserToAddRows = false;
20            // dataGridView1.ReadOnly = true;
21 
22             System.Windows.Forms.DataGridViewTextBoxColumn Column1 = new DataGridViewTextBoxColumn();
23             Column1.DataPropertyName = "ID";
24             Column1.HeaderText = "编号";
25             Column1.Name = "Column1";
26             
27             System.Windows.Forms.DataGridViewTextBoxColumn ColLayerId = new DataGridViewTextBoxColumn();
28             ColLayerId.DataPropertyName = "Layer_id";
29             ColLayerId.HeaderText = "分层号";
30             ColLayerId.Name = "ColLayerId";
31 
32             System.Windows.Forms.DataGridViewTextBoxColumn ColHoleId = new DataGridViewTextBoxColumn();
33             ColHoleId.DataPropertyName = "HoleId";
34             ColHoleId.HeaderText = "钻孔号";
35             ColHoleId.Name = "ColHoleId";
36 
37             System.Windows.Forms.DataGridViewComboBoxColumn Column2 = new DataGridViewComboBoxColumn();
38             Column2.DisplayStyle = System.Windows.Forms.DataGridViewComboBoxDisplayStyle.Nothing;//和txtbox一样显示
39             Column2.Width = 160;
40             string sql1 = "select * from Stra;";           
41             Column2.DataPropertyName = "StraId";
42             Column2.DataSource = GetTable(sql1);
43             Column2.DisplayMember = "Stra_name";
44             Column2.ValueMember = "ID";
45 
46             DataGridViewActionButtonColumn colAction = new DataGridViewActionButtonColumn();
47             colAction.Name = "colAction";
48             colAction.Width = 160;
49 
50             this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
51             Column1,ColLayerId,ColHoleId,Column2,colAction});
52 
53             string sql2 = "select * from Drill";
54             this.dataGridView1.DataSource = GetTable(sql2);//在为ComboxCell添加完绑定后给DataGridView添加数据源
55 
56         }

 参考文献

http://www.cnblogs.com/peterzb/archive/2009/05/29/1491891.html

http://msdn.microsoft.com/zh-cn/library/ms404353.aspx

http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.autogeneratecolumns.aspx

文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
原文地址:https://www.cnblogs.com/yhlx125/p/2406843.html