DataGridView 的多种样式列控件

合集下载

wpf datagrid column 类型

wpf datagrid column 类型

在WPF 的DataGrid 控件中,可以通过不同的列类型来显示和编辑数据。

以下是一些常见的DataGrid 列类型:
1. DataGridTextColumn:文本列,用于显示和编辑文本数据。

2. DataGridCheckBoxColumn:复选框列,用于显示和编辑布尔数据。

3. DataGridComboBoxColumn:下拉列表列,用于显示和编辑预定义的选项。

4. DataGridHyperlinkColumn:超链接列,用于显示可点击的超链接。

5. DataGridTemplateColumn:自定义模板列,使用自定义的数据模板来显示和编辑数据。

6. DataGridImageColumn:图像列,用于显示图像数据。

7. DataGridDatePickerColumn:日期选择列,用于显示和编辑日期数据。

这些列类型可以通过XAML 或代码来设置和定义。

在XAML 中,可以使用DataGrid 的Columns 属性来定义列,同时设置列的类型和其他属性。

在代码中,可以使用DataGrid 的Columns 集合来动态添加和配置列。

除了上述列类型之外,还可以使用自定义列类型来满足特殊需求。

可以通过继承自DataGridColumn 类来创建自定义列类型,并重写相关方法和属性来定制列的行为和外观。

使用适当的列类型可以提供更好的用户体验,并方便数据的显示和编辑。

根据具体的需求,选择合适的列类型并进行相应的配置,以达到预期的数据展示和交互效果。

datagridviewbuttoncolumn 样式

datagridviewbuttoncolumn 样式

datagridviewbuttoncolumn 样式DataGridViewButtonColumn 样式是指在DataGridView 中使用DataGridViewButtonColumn 控件时,对按钮列进行样式设置的过程。

在DataGridViewButtonColumn 中,每个单元格都是一个按钮,可以根据需要对按钮进行自定义样式设置,如颜色、字体、边框等。

DataGridViewButtonColumn 样式可以通过以下几种方式进行设置:1. DataGridViewCellStyle 属性:可以通过DataGridViewCellStyle 对象设置按钮列的样式。

DataGridViewButtonColumn 类中的DefaultCellStyle 属性可以设置按钮列的默认样式,即所有单元格的样式。

通过DefaultCellStyle 对象的属性,可以设置按钮的背景颜色、前景颜色、字体、边框等。

例如,要设置按钮列的背景颜色为蓝色,可以使用以下代码:csharpdataGridViewButtonColumn1.DefaultCellStyle.BackColor = Color.Blue; 注意:这种方式设置的样式将应用于所有的单元格,如果需要对特定单元格进行样式设置,可以在下面的CellFormatting 事件中进行处理。

2. DataGridViewCellStyle 对象:可以为每个单元格独立设置样式,通过CellStyle 属性可以获取或设置单元格的样式。

可以使用DataGridViewCellStyle 构造函数创建新的CellStyle 对象,也可以使用DefaultCellStyle 属性复制默认样式。

例如,要设置第一个单元格的背景颜色为红色,可以使用以下代码:csharpdataGridViewButtonColumn1.Rows[0].Cells[0].Style.BackColor = Color.Red;3. CellFormatting 事件:DataGridView 控件中的CellFormatting 事件可以在绘制单元格时对单元格进行自定义样式设置。

DataGridView控件操作大全(内容居中显示,右键绑定菜单)

DataGridView控件操作大全(内容居中显示,右键绑定菜单)

DataGridView控件操作⼤全(内容居中显⽰,右键绑定菜单)DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter '标题居中DataGridView1.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter '内容居中this.dataGridView1.AutoGenerateColumns = false; //让它不⾃⼰产⽣多余的列// this.dataGridView1.AutoSizeColumnsModel = Fill //列名占满容器this.dataGridView1.AutoSizeColumnsModel = AllCells //列名占满容器#region [DataGridView控件单元格点击事件,绑定右键菜单]private void dataGridView_Score_CellClick(object sender, DataGridViewCellEventArgs e){if (e.RowIndex > -1){//绑定右键菜单dataGridView_Score.SelectedRows[0].ContextMenuStrip = this.contextMenuStrip1;}}#endregionDataGridView单元格内容显⽰格式化:代⼊Dictionary<string,string>⽅法private void dataGridView_Score_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e){Dictionary<string,string> scoreStatus = GetScoreStatus();if (e.ColumnIndex == 7){e.Value = scoreStatus[e.Value.ToString()];e.FormattingApplied = true;}}#region [设定ComboBox数据源]private Dictionary<string, string> GetScoreStatus(){Dictionary<string, string> dic = new Dictionary<string, string>{{"2", "全部"},{"1", "成功"},{"0", "失败"}};return dic;}#endregion获取DataGridView选中数据, 返回对象:#region[获取DataGridView的选中⾏数据]/// <summary>/// 获取当前选中⾏的数据/// </summary>/// <returns>当前选中⾏数据</returns>private JudgeSetting GetSelectRowInfo(){DataGridViewRow selectRows = dataGridView_Judge.SelectedRows[0];JudgeSetting setting = new JudgeSetting();if (selectRows != null){// 项⽬代码setting.Ksxmdm = Convert.ToInt32(selectRows.Cells["项⽬代码"].Value);// 项⽬名称setting.Gakfmc = Convert.ToString(selectRows.Cells["项⽬名称"].Value);}return setting;}#endregion替换DataGridView头部显⽰,#region[替换DataTable头]/// <summary>/// 替换DataTable头/// </summary>/// <param name="dt">查询出的DataTable</param>/// <returns></returns>private DataTable ReplaceDataTableHead(DataTable dt){dt.Columns[0].ColumnName = "项⽬代码";dt.Columns[1].ColumnName = "项⽬名称";dt.Columns[2].ColumnName = "扣分项⽬";return dt;}#endregion#region[DataTable样式调整]/// <summary>/// DataTable样式调整/// </summary>private void ChangeDataTableStyle(){// KEY列隐藏this.dataGridView_Judge.Columns[10].Visible = false;this.dataGridView_Judge.Columns[9].Visible = false;//this.dataGridView_Judge.Columns[0].Width = 80;//this.dataGridView_Judge.Columns[1].Width = 100;this.dataGridView_Judge.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; }#endregion绑定dataTable到DataGridView#region[绑定dataTable到DataGridView]/// <summary>/// 绑定dataTable到DataGridView/// </summary>/// <param name="dt">源DataTable</param>private void BindDataTble(DataTable dt){if (toolStripComboBox1.Text != "全部"){DataRow[] rows = dt.Select(string.Format("GAKFMC = '{0}'", toolStripComboBox1.Text));DataTable table = dt.Clone();foreach(DataRow row in rows){table.Rows.Add(row.ItemArray);}dt = table;}// 修改DataTable头部dt = ReplaceDataTableHead(dt);// 绑定数据this.dataGridView_Judge.DataSource = dt;// 修改DataTable样式ChangeDataTableStyle();// 刷新读取的条数this.toolStripLabel4.Text = dt.Rows.Count.ToString();}#endregion刷新DataGridView的绑定#region[刷新DataGridView的绑定]/// <summary>/// 刷新DataGridView的绑定/// </summary>/// <param name="sqlEnum">查询语句</param>private void RefreshBindTable(SqlStatusEnum sqlEnum){try{DataTable dt = QueryData(sqlEnum, null);if (dt != null && dt.Rows.Count > 0){BindDataTble(dt);}elseMessageBox.Show("查询错误,或未查询到相关数据!");}catch (Exception ex){LogHelper.Error(ex);}}#endregionDataGridView控件绑定List<string> List<Student> strList = new List<Student>(){new Student(){StuId = 1, StuName = "张三"},new Student(){StuId = 2, StuName = "李四"},new Student(){StuId = 3, StuName = "王五"}};//查找出ID,并显⽰姓名,List<{m}>绑定到datagridview,可以把m去掉,.Select(m => new { m.StuName })这样展⽰就是StuName的列名 var students = strList.Where(s =>s.StuId == 2).Select(m => new { m = m.StuName }).ToList();dataGridView1.DataSource = students; //显⽰出以m为列名的数据,可以⼿动修改列名将dataGridView选定的⾏转换为实体对象ContactModel model = dataGridView1.CurrentRow.DataBoundItem as ContactModel;。

控件:DataGridView列类型

控件:DataGridView列类型

控件:DataGridView列类型 DataGridView的列的类型提供有多种,包括有:(1)DataGridViewTextBoxColumn(⽂本列,默认的情况下就是这种)(2)DataGridViewComboBoxColumn(组合框列,名字瞎起的,就是这个功能要⽤到的列)(3)DataGridViewLinkColumn(链接列)(4)DataGridViewButtonColumn(按钮列)(5)DataGridViewCheckBoxColumn(打钩列)⼀、DataGridViewComboBoxColumn 实例:DataTable dt = DBServiceHelper.businessDbHelper.Fill(UserInfo, "select a.code, from tequip_ini a where a.equip_type in (1,6) ");if (dt != null){dataGridViewTextBoxColumn3.DataPropertyName = "code";dataGridViewTextBoxColumn3.DisplayMember = "name";dataGridViewTextBoxColumn3.ValueMember = "code";dataGridViewTextBoxColumn3.DataSource = dt;} GrdReadRecord2.EditingControlShowing += newDataGridViewEditingControlShowingEventHandler(GrdReadRecord2_EditingControlShowing); 实现每⼀⾏的该单元格具有不同的ComboBox项: private void GrdReadRecord2_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e){try{if (GrdReadRecord2.CurrentCell.ColumnIndex == 5){ComboBox cb = e.Control as ComboBox;if (cb != null){DataTable dt = DBServiceHelper.businessDbHelper.Fill(UserInfo, " select cast(0 as varchar(200)) as code ,'' as Name UNION ALL select a.code, from tequip_ini a "+ " left join CardPosItem b on a.PosItem=b.id where a.equip_type in(1,6) and b.id= " + this.GrdReadRecord2.CurrentRow.Cells["ColPostItemID"].Value.ToString());cb.DataSource = dt;if (dt != null && dt.Rows.Count > 0)cb.SelectedIndex = 0;}}}catch (Exception ex){ListBoxAdd(lHint2, "异常:" + ex.Message.ToString());}} 值得注意的是: 每⼀⾏单元格绑定的数据必须要存在列的Item内,即是在EditingControlShowing前要先设置DataPropertyName、DisplayMember、ValueMember、DataSource,EditingControlShowing查出的数据必须是DataSource的⼦集。

datagridviewtextboxdropdowncolumn

datagridviewtextboxdropdowncolumn

datagridviewtextboxdropdowncolumn【原创版】目录1.数据网格视图(DataGridView)2.文本框(TextBox)3.下拉列表(DropDown)4.列(Column)正文在计算机编程中,数据网格视图(DataGridView)是一种常用于显示和编辑数据的控件。

它可以让用户轻松地查看和操作数据,类似于电子表格软件,如 Microsoft Excel。

数据网格视图中包含多个列,每个列都可以包含不同类型的数据,如字符串、数字、日期等。

文本框(TextBox)是一种简单的输入控件,用于在程序中输入文本数据。

文本框通常用于获取用户输入的信息,例如用户名、密码等。

在数据网格视图中,文本框可以用作单元格的编辑控件,以便用户在单元格中输入文本数据。

下拉列表(DropDown)是一种常用于显示选项列表的控件。

在数据网格视图中,下拉列表可以用于显示一组可选值,以便用户从中选择一个值。

这可以节省空间,并确保数据保持一致和准确。

下拉列表通常与文本框或组合框(ComboBox)一起使用,以便用户从中选择一个值,而不是在文本框中输入值。

列(Column)是数据网格视图中用于显示和存储数据的基本单元。

每列都可以包含不同类型的数据,并且可以对数据进行排序、筛选和分组操作。

在数据网格视图中,列通常具有独立的标题、数据类型和默认值。

用户可以根据需要添加、删除或修改列以满足不同的数据需求。

总之,数据网格视图、文本框、下拉列表和列是计算机编程中常用的控件和组件,用于显示、编辑和操作数据。

它们在各种应用程序和场景中都有广泛的应用,如数据录入、数据分析和数据可视化等。

DataGridView控件详细介绍

DataGridView控件详细介绍

DataGridView控件详细介绍通过DataGridView控件,可以显⽰和编辑表格式的数据,⽽这些数据可以取⾃多种不同类型的数据源。

DataGridView控件具有很⾼的的可配置性和可扩展性,提供了⼤量的属性、⽅法和事件,可以⽤来对该控件的外观和⾏为进⾏⾃定义。

当你需要在WinForm应⽤程序中显⽰表格式数据时,可以优先考虑DataGridView(相⽐于DataGrid等其它控件)。

如果你要在⼩型⽹格中显⽰只读数据,或者允许⽤户编辑数以百万计的记录,DataGridView将为你提供⼀个易于编程和良好性能的解决⽅案。

DataGridView ⽤来替换先前版本中的DataGrid,拥有较DataGrid更多的功能;但DataGrid仍然得到保留,以备向后兼容和将来使⽤。

如果你要在两者中选择,可以参考下⾯给出的DataGrid 和DataGridView之间区别的细节信息。

DataGridView提供了⼤量的DataGrid所不具备的基本功能和⾼级功能。

此外,DataGridView 的结构使得它较之DataGrid控件更容易扩展和⾃定义。

下表描述了DataGridView提供⽽DataGrid未提供的⼏个主要功能。

DataGridView功能描述多种列类型与DataGrid相⽐,DataGridView 提供了更多的内置列类型。

这些列类型能够满⾜⼤部分常见需要,⽽且⽐DataGrid 中的列类型易于扩展或替换。

多种数据显⽰⽅式DataGrid仅限于显⽰外部数据源的数据。

⽽DataGridView 则能够显⽰⾮绑定的数据,绑定的数据源,或者同时显⽰绑定和⾮绑定的数据。

你也可以在DataGridView中实现virtual mode,实现⾃定义的数据管理。

⽤于⾃定义数据显⽰的多种⽅式DataGridView提供了很多属性和事件,⽤于数据的格式化和显⽰。

⽐如,你可以根据单元格、⾏和列的内容改变其外观,或者使⽤⼀种类型的数据替代另⼀种类型的数据。

DataGridView控件使用大全

DataGridView控件使用大全

DataGridView控件DataGridView是用于Windows Froms 2.0的新网格控件。

它可以取代先前版本中DataGrid控件,它易于使用并高度可定制,支持很多我们的用户需要的特性。

关于本文档:本文档不准备面面俱到地介绍DataGridView,而是着眼于深入地介绍一些技术点的高级特性。

本文档按逻辑分为5个章节,首先是结构和特性的概览,其次是内置的列/单元格类型的介绍,再次是数据操作相关的内容,然后是主要特性的综述,最后是最佳实践。

大部分章节含有一个―Q & A‖部分,来回答该章节相关的一些常见问题。

注意,某些问题会由于知识点的关联性重复出现在多个章节。

这些问题、答案及其附带的示例代码都包含在本文档的附录部分。

内容1 何为DataGridView.. 41.1 DataGridView和DataGrid 之间的区别 (4)1.2 DataGridView的亮点 (5)2 DataGridView的结构 (6)2.1 结构元素 (6)2.2 单元格和组 (6)2.3 DataGridView的单元格 (6)2.3.1 DataGridViewCell的工作机制 (7)2.4 DataGridView的列 (9)2.5 DataGridView的编辑控件 (9)2.6 DataGridView的行 (10)3 列/单元格类型揭密 (11)3.1 DataGridViewTextBoxColumn. 113.2 DataGridViewCheckBoxColumn. 123.3 DataGridViewImageColumn. 123.4 DataGridViewButtonColumn. 133.5 DataGridViewComboBoxColumn. 133.5.1 DataError与ComboBox列 (13)3.6 DataGridViewLinkColumn. 144 操作数据 (15)4.1 数据输入和验证的相关事件 (15)4.1.1 数据验证相关事件的顺序 (15)4.1.2 验证数据 (15)4.1.3 在新行中的数据输入 (16)4.2 关于Null值 (19)4.2.1 NullValue属性 (19)4.2.2 DataSourceNullValue属性 (19)4.3 DataError事件 (20)4.4 数据绑定模式 (21)4.4.1 非绑定模式 (21)4.4.2 绑定模式 (21)4.4.3 虚拟模式 (22)4.4.4 混合模式 (22)5 Overview of features. 245.1 Styling. 245.1.1 The DataGridViewCellStyle Class. 245.1.2 Using DataGridViewCellStyle Objects. 245.1.3 Style Inheritance. 255.1.4 Setting Styles Dynamically. 285.2 Custom painting. 285.2.1 Paint Parts. 285.2.2 Row Pre Paint and Post Paint 295.3 Autosizing. 305.3.1 Sizing Options in the Windows Forms DataGridView Control 30 5.3.2 Resizing with the Mouse. 315.3.3 Automatic Sizing. 325.3.4 Programmatic Resizing. 335.3.5 Customizing Content-based Sizing Behavior. 345.3.6 Content-based Sizing Options. 345.4 Selection modes. 345.4.1 Programmatic Selection. 355.5 Scrolling. 355.5.1 Scroll event 355.5.2 Scroll bars. 355.5.3 Scrolling Properties. 365.6 Sorting. 365.6.1 Programmatic Sorting. 375.6.2 Custom Sorting. 385.7 Border styles. 395.7.1 Standard Border Styles. 395.7.2 Advanced Border Styles. 395.8 Enter-Edit modes. 405.9 Clipboard copy modes. 405.10 Frozen columns/rows. 415.11 Implementing Custom cells and editing controls/cells. 415.11.1 IDataGridViewEditingControl 425.11.2 IDataGridViewEditingCell 425.12 Virtual mode. 425.12.1 Bound Mode and Virtual Mode. 425.12.2 Supplementing Bound Mode. 425.12.3 Replacing Bound Mode. 435.12.4 Virtual-Mode Events. 435.12.5 Best Practices in Virtual Mode. 445.13 Capacity. 446 Best Practices. 456.1 Using Cell Styles Efficiently. 456.2 Using Shortcut Menus Efficiently. 456.3 Using Automatic Resizing Efficiently. 456.4 Using the Selected Cells, Rows, and Columns Collections Efficiently. 466.5 Using Shared Rows. 466.6 Preventing Rows from Becoming Unshared. 47附录A –常见问题: (49)1. 如何使指定的单元格不可编辑?. 492. 如何让一个单元格不可用?. 493. 如何避免用户将焦点设置到指定的单元格? (51)4. 如何使所有单元格总是显示控件(不论它是否处于编辑状态)?. 515. Why does the cell text show up with ―square‖ characters where they should be new lines?.516. 如何在单元格内同时显示图标和文本? (51)7. 如何隐藏一列? (53)8. 如何避免用户对列排序? (53)9. 如何针对多个列排序?. 5410. 如何为编辑控件添加事件处理函数?. 5811. 应在何时移除编辑控件的事件处理函数?. 5812. 如何处理ComboBox列中ComboBox控件的SelectIndexChanged事件?. 5813. 如何通过拖放调整行的顺序? (59)14. 如何调整最后一列的宽度使其占据网格的剩余客户区? (60)15. 如何让TextBox类型的单元格支持换行?. 6016. 如何使Image列不显示任何图像(字段值为null时)?. 6117. 如何能够在ComboBox类型的单元格中输入数据?. 6118. How do I have a combo box column display a sub set of data based upon the value of a different combo box column? 6119. 如何在用户编辑控件的时候(而不是在验证时)就显示错误图标?. 6220. 如何同时显示绑定数据和非绑定数据? (65)21. How do I show data that comes from two tables?. 6622. 如何显示主从表? (66)23. 如何在同一DataGridView中显示主从表? (68)24. 如何避免用户对列排序?. 6825. 如何在点击工具栏按钮的时候将数据提交到数据库? (68)26. 如何在用户删除记录时显示确认对话框? (68)1 何为DataGridView通过DataGridView控件,可以显示和编辑表格式的数据,而这些数据可以取自多种不同类型的数据源。

C#WinForm下DataGridView单选按钮列和支持三种选择状态的复选框列的实现

C#WinForm下DataGridView单选按钮列和支持三种选择状态的复选框列的实现

C#WinForm下DataGridView单选按钮列和⽀持三种选择状态的复选框列的实现在C# WinForm下做过项⽬的朋友都知道,其中的DataGridView控件默认只⽀持DataGridViewButtonColumn、DataGridViewCheckBoxColumn、DataGridViewComboBoxColumn、DataGridViewImageColumn、DataGridViewLinkColumn和DataGridViewTextBoxColumn六种列类型,如果你想要在DataGridView的列中添加其它的⼦控件,则需要⾃⼰实现DataGridViewColumn和DataGridViewCell,这就意味着你需要从现有的列中继承并改写⼀些⽅法,如实现⼀个⽀持单选按钮的列,或⽀持三种选择状态的多选按钮的列。

上⾯两个截图分别为RadioButton列和⽀持三种状态的CheckBox列在DataGridView中的实现效果,我是在Windows 2003中实现的,因此显⽰的效果跟在XP和Vista下有些区别,Vista下CheckBox的第三种状态(不确定状态)显⽰出来的效果是⼀个实⼼的蓝⾊⽅块。

下⾯我看具体来看看如何实现这两种效果。

要实现⾃定义的DataGridView列,你需要继承并改写两个类,⼀个是基于DataGridViewColumn的,⼀个是基于DataGridViewCell的,因为RadionButton和CheckBox的实现原理类似,因此我们可以将这两种列采⽤同⼀种⽅法实现。

创建DataGridViewDisableCheckBoxCell和DataGridViewDisableCheckBoxColumn两个类,分别继承⾃DataGridViewCheckBoxCell和DataGridViewCheckBoxColumn。

代码如下:public class DataGridViewDisableCheckBoxCell: DataGridViewCheckBoxCell{public bool Enabled { get; set; }// Override the Clone method so that the Enabled property is copied.public override object Clone(){DataGridViewDisableCheckBoxCell cell = (DataGridViewDisableCheckBoxCell)base.Clone();cell.Enabled = this.Enabled;return cell;}// By default, enable the CheckBox cell.public DataGridViewDisableCheckBoxCell(){this.Enabled = true;}// Three state checkbox column cellprotected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex,DataGridViewElementStates elementState, object value, object formattedValue, string errorText,DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts){// The checkBox cell is disabled, so paint the border, background, and disabled checkBox for the cell.if (!this.Enabled){// Draw the cell background, if specified.if ((paintParts & DataGridViewPaintParts.Background) == DataGridViewPaintParts.Background){SolidBrush cellBackground = new SolidBrush(cellStyle.BackColor);graphics.FillRectangle(cellBackground, cellBounds);cellBackground.Dispose();}// Draw the cell borders, if specified.if ((paintParts & DataGridViewPaintParts.Border) == DataGridViewPaintParts.Border){PaintBorder(graphics, clipBounds, cellBounds, cellStyle, advancedBorderStyle);}// Calculate the area in which to draw the checkBox.CheckBoxState state = CheckBoxState.MixedDisabled;Size size = CheckBoxRenderer.GetGlyphSize(graphics, state);Point center = new Point(cellBounds.X, cellBounds.Y);center.X += (cellBounds.Width - size.Width) / 2;center.Y += (cellBounds.Height - size.Height) / 2;// Draw the disabled checkBox.CheckBoxRenderer.DrawCheckBox(graphics, center, state);}else{// The checkBox cell is enabled, so let the base class, handle the painting.base.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);}}}public class DataGridViewDisableCheckBoxColumn : DataGridViewCheckBoxColumn{public DataGridViewDisableCheckBoxColumn(){this.CellTemplate = new DataGridViewDisableCheckBoxCell();}}主要是要实现DataGridViewDisableCheckBoxCell的呈现⽅式,其中设置了CheckBoxState的状态为MixedDisabled,表⽰⽀持三种状态,这个是实现效果的核⼼,如果要实现RadioButton列的效果,只需要将Paint⽅法改成下⾯这样即可:protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex,DataGridViewElementStates elementState, object value, object formattedValue, string errorText,DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts){// Draw the cell background, if specified.if ((paintParts & DataGridViewPaintParts.Background) == DataGridViewPaintParts.Background){SolidBrush cellBackground = new SolidBrush(cellStyle.BackColor);graphics.FillRectangle(cellBackground, cellBounds);cellBackground.Dispose();}// Draw the cell borders, if specified.if ((paintParts & DataGridViewPaintParts.Border) == DataGridViewPaintParts.Border){PaintBorder(graphics, clipBounds, cellBounds, cellStyle, advancedBorderStyle);}// Calculate the area in which to draw the checkBox.RadioButtonState state = value != null && (SelectedStatus)value == SelectedStatus.Selected ? RadioButtonState.CheckedNormal : RadioButtonState.UncheckedNormal; Size size = RadioButtonRenderer.GetGlyphSize(graphics, state);Point center = new Point(cellBounds.X, cellBounds.Y);center.X += (cellBounds.Width - size.Width) / 2;center.Y += (cellBounds.Height - size.Height) / 2;// Draw the disabled checkBox.RadioButtonRenderer.DrawRadioButton(graphics, center, state);}使⽤RadioButtonState代替CheckBoxState。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

继续发布VS下DataGridView 的多种样式列控件DataGridView 无论是美观与功能方面都是DataGrid所不能比的,应该说DataGridView 不是DataGrid的升级,因为DataGridView 使用了一套全新的构建方式,引入了DataGridViewCell ,DataGridViewColumn,DataGridViewRow,等,新的概念,也使编程更容易了,它提供了DataGridViewTextBoxColumn,DataGridViewImageColumn,DataGridLinkColumn,Da taGridViewComboBoxColumn,DataGridViewButtonColumn,DataGridViewCheckBoxColumn,等样式列但我们常用的远不只这些样式列,所以我不想把所有的样式列都给大家做出来,我只是想抛砖引玉通过我自己做的四个样式列来让大家掌握自定义DataGridView样式列的方法.由于时间仓促功能不是很完善,望大家见谅,好了大家先看看4个控件的效果.一:DataGridViewMaskedTextBoxColumn(正则表达式样式列)using System;using System.Collections.Generic;using ponentModel;using System.Drawing;using System.Data;using System.Text;using System.Windows.Forms;using System.Drawing.Design;namespace WindowsApplication23{//Cell编辑类,实现IDataGridViewEditingControl接口,可参照ComboBoxEditingCo ntrol的写法public class DataGridViewMaskedTextBoxEditingControl:MaskedTextBox,IDataGridViewEditingControl{protected int rowIndex;protected DataGridView dataGridView;protected bool valueChanged = false;public DataGridViewMaskedTextBoxEditingControl(){base.TabStop = false;}//重写基类(MakedTextBox)的OnTextChanged方法protected override void OnTextChanged(EventArgs e){base.OnTextChanged(e);NotifyDataGridViewOfValueChange();}// 当text值发生变化时,通知DataGridViewprivate void NotifyDataGridViewOfValueChange(){valueChanged = true;dataGridView.NotifyCurrentCellDirty(true);}///<summary>///设置对齐方式///</summary>///<param name="align"></param>///<returns></returns>private static HorizontalAlignment translateAlignment(DataGridViewConten tAlignment align){switch (align){case DataGridViewContentAlignment.TopLeft:case DataGridViewContentAlignment.MiddleLeft:case DataGridViewContentAlignment.BottomLeft:return HorizontalAlignment.Left;case DataGridViewContentAlignment.TopCenter:case DataGridViewContentAlignment.MiddleCenter:case DataGridViewContentAlignment.BottomCenter:return HorizontalAlignment.Center;case DataGridViewContentAlignment.TopRight:case DataGridViewContentAlignment.MiddleRight:case DataGridViewContentAlignment.BottomRight: return HorizontalAlignment.Right;}return HorizontalAlignment.Left;}///<summary>///在Cell被编辑的时候光标显示///</summary>public Cursor EditingPanelCursor{get{return Cursors.IBeam;}}///<summary>///获取或设置所在的DataGridView///</summary>public DataGridView EditingControlDataGridView{get{return dataGridView;}set{dataGridView = value;}}///<summary>///获取或设置格式化后的值///</summary>public object EditingControlFormattedValue{set{Text = value.ToString();NotifyDataGridViewOfValueChange();}get{return this.Text;}}///<summary>///获取控件的Text值///</summary>///<param name="context">错误上下文</param>///<returns></returns>public virtual object GetEditingControlFormattedValue(DataGridViewDataEr rorContexts context){return Text;}///<summary>///编辑键盘///</summary>///<param name="keyData"></param>///<param name="dataGridViewWantsInputKey"></param>///<returns></returns>public bool EditingControlWantsInputKey(Keys keyData, bool dataGridView WantsInputKey){switch (keyData & Keys.KeyCode){case Keys.Right:if (!(this.SelectionLength == 0&& this.SelectionStart == this.ToString().Length)){return true;}break;case Keys.Left:if (!(this.SelectionLength == 0&& this.SelectionStart == 0)){return true;}break;case Keys.Home:case Keys.End:if (this.SelectionLength != this.ToString().Length){return true;}break;case Keys.Prior:case Keys.Next:if (this.valueChanged){return true;}break;case Keys.Delete:if (this.SelectionLength > 0 || this.SelectionStart < this.ToString(). Length){return true;}break;}return !dataGridViewWantsInputKey;}public void PrepareEditingControlForEdit(bool selectAll){if (selectAll){SelectAll();}else{this.SelectionStart = this.ToString().Length;}}public virtual bool RepositionEditingControlOnValueChange{get{return false;}}///<summary>///控件所在行///</summary>public int EditingControlRowIndex{get{return this.rowIndex;}set{this.rowIndex = value;}}///<summary>///设置样式///</summary>///<param name="dataGridViewCellStyle"></param>public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGrid ViewCellStyle){this.Font = dataGridViewCellStyle.Font;this.ForeColor = dataGridViewCellStyle.ForeColor;this.BackColor = dataGridViewCellStyle.BackColor;this.TextAlign = translateAlignment(dataGridViewCellStyle.Alignment); }///<summary>///是否值发生了变化///</summary>public bool EditingControlValueChanged{get{return valueChanged;}set{this.valueChanged = value;}}}}(二)DataGridViewFormat(可以获取格式的列,如N2 ,1234,11)(三)DataGridViewTreeViewColumn(下拉列表树控件)(四)DataGridViewDateTimeColumn(日期选择列控件)。

相关文档
最新文档