首页编程uniqueconstraint,c# datagridview主要方法

uniqueconstraint,c# datagridview主要方法

编程之家2023-11-01122次浏览

你是否想了解更多关于uniqueconstraint和c# datagridview主要方法的知识?在本文中,小编将为您详细介绍这两个话题,帮助您更好地理解。

uniqueconstraint,c# datagridview主要方法

c# datagridview主要方法

基本数据绑定

熟悉 DataGridView的最佳方法就是实际尝试一下,无需配置任何属性。就像 DataGrid一样,您可以使用 DataSource属性来绑定 DataTable对象(或从 DataTable派生的对象)。

Dim ds As DataSet= GetDataSet()DataGridView1.DataSource= ds.Tables("Customers")

与 DataGrid不同的是,DataGridView一次只能显示一个表。如果绑定整个 DataSet,则不会显示任何数据,除非您使用要显示的表名设置了 DataMember属性。

DataGridView1.DataSource= dsDataGridView1.DataMember="Customers"

美化 DataGridView

uniqueconstraint,c# datagridview主要方法

datagridview的默认外观仅仅比 DataGrid略有改进,但是使用几项快速调整功能,您可以将其显著改进。

其中的一个问题就是列无法自动展开以适合其包含的数据。您可以使用 DataGridView.AutoSizeColumns()方法以及 DataGridViewAutoSizeColumnCriteria枚举中的某个值来解决此问题。您可以选择根据标题文本、当前显示的行或表中的所有行的的宽度来调整列宽。

'根据标题或此列的某一行中'最长一段文本的宽度调整'列宽。DataGridView1.AutoSizeColumns( _DataGridViewAutoSizeColumnCriteria.HeaderAndRows)

请记住,此方法必须在绑定数据后调用,否则不会产生任何效果。你可能还需要在用户编辑数据后使用它(可能在响应 DataGridView.CellValueChanged等事件时)。

如果不增加列宽,则可以更改行高。默认情况下,列中的文本会跨越多行。如果您使用 DataGridView.AutoSizeRows()方法,则行会根据其中的内容调整高度。使用此方法前,您可能希望增加列宽,尤其是在字段包含大量文本时。例如,以下代码片段使“说明”列的列宽增加为原列宽的四倍,然后调整行高以容纳其内容。

DataGridView.Columns("Description").Width*= 4DataGridView.AutoSizeRows( _DataGridViewAutoSizeRowsMode.HeaderAndColumnsAllRows)

uniqueconstraint,c# datagridview主要方法

比较了自动调整 DataGridView大小的各种方法。

另一个合理的更改是清理每一列中显示的标题文本。例如,标题“order Date”比字段名称“OrderDate”看上去更为专业。这项更改很容易进行。您只需从 DataGridView.Columns集合中检索相应的 DataGridViewColumn,并修改其 HeaderText属性:

DataGridView.Columns("OrderID").HeaderText="Order ID"

使用 DataGridView选择单元格

默认情况下,datagridview允许自由选择。用户可以突出显示单元格或单元格组,可以一次突出显示所有单元格(通过单击网格右上角的方块),还可以突出显示一行或多行(通过在行标题列中单击)。根据选择模式,用户甚至能够通过选择列标题来选择一列或多列。通过使用 DataGridViewSelectionMode枚举中的某个值来设置 DataGridView.SelectionMode属性,可以控制此行为,如下所述:

通过 DataGridView,可以使用以下三个属性方便地检索选定的单元格:SelectedCells、SelectedRows和 SelectedColumns。无论使用的是哪种选择模式,SelectedCells都始终返回 DataGridViewCell对象的集合。另一方面,如果使用行标题选择了整个行,则 SelectedRows只返回信息,而如果使用列标题选择了整个列,则 SelectedColumns也只返回信息。

例如,以下代码片段将检查选定的整个行。只要找到一行,它就会在消息框中显示 CustomerID列中的相应值:

For Each SelectedRow As DataGridViewRow In _DataGridView1.SelectedRowsMessageBox.Show( _SelectedRow.Cells("CustomerID").Value)Next

使用 CurrentCell或 CurrentCellAddress属性检索对当前单元格的引用也同样简单。使用 DataGridView时,您会注意到当前单元格被一个矩形围住,看起来像是一个用黑色虚线绘制的方框。这就是用户当前所在的位置。

currentcelladdress属性是只读的,但是您可以使用 CurrentCell以编程方式更改当前位置。完成此操作后,DataGridView将被滚动以使当前位置可见。

'移至第十一行的第四个单元格。DataGridView.CurrentCell= _DataGridView.Rows(10).Cells(3)

DataGridView对象

到目前为止,您已经了解了如何与当前选定的一组行、单元格和列进行交互。datagridview提供了两个关键集合,用于处理整个数据集。这两个集合分别是 Columns(DataGridViewColumn对象的集合)和 Rows(DataGridViewRow对象的集合,每个对象都引用一组 DataGridViewCell对象的集合)。显示了对象模型。

一般而言,您将使用 DataGridViewColumn对象来配置列显示属性、格式设置及标题文本,而使用 DataGridViewRow和 DataGridViewCell对象从绑定的记录中检索实际数据。在 DataGridViewCell中修改数据时,处理方式与用户编辑的方式相同:引发相应的 DataGridView更改事件,并且修改底层的 DataTable。

现在您已经了解了 DataGridView对象模型,因此可以轻松地创建遍历该表的代码。要选择行、列或单元格,只需找到对应的 DataGridViewRow、DataGridViewColumn或 DataGridViewCell对象,并将 IsSelected属性设置为 True。

以下示例以编程方式选择 OrderID字段的值小于 100的所有行:

For Each Row As DataGridViewRow In DataGridView1.RowsIf Row.Cells("OrderID").Value< 100 ThenRow.Selected= TrueEnd IfNext

值得一提的是,有几个从 DataGridViewColumn派生的不同的类。这些类可以控制在单元格中显示和编辑值的方式。.NET包括五个预先创建的 DataGridView列类:DataGridViewButtonColumn、DataGridViewCheckBoxColumn、DataGridViewComboBoxColumn、DataGridViewImageColumn和 DataGridViewTextBoxColumn。

DataGridView样式

设计 DataGridView时面临的挑战之一就是创建一个格式设置系统,该系统要能够足够灵活地应用不同级别的格式设置,而对于非常大的表又要保持高效。从灵活性角度来看,最好的方法是允许开发人员分别配置每个单元格。但是从效率角度来看,这种方法可能是有害的。包含数千行的表中具有好几万个单元格,维护每个单元格的不同格式肯定会浪费很多内存。

为解决此问题,datagridview通过 DataGridViewCellStyle对象来实现多层模型。DataGridViewCellStyle对象表示单元格的样式,并且包括如颜色、字体、对齐、换行和数据格式等详细信息。您可以创建一个 DataGridViewCellStyle来指定整个表的默认格式。此外,还可以指定列、行和各个单元格的默认格式。格式设置的越细致、创建的 DataGridViewCellStyle对象越多,该解决方案的可伸缩性也就越小。但是,如果您主要使用基于列和基于行的格式设置,并且只是偶尔设置各个单元格的格式,则与 DataGrid相比,DataGridView不需要太多内存。

datagridview应用格式设置时,将遵循以下优先顺序(从最高到最低):

1. DataGridViewCell.Style 2. DataGridViewRow.DefaultCellStyle 3. DataGridView.AlternatingRowsDefaultCellStyle 4. DataGridView.RowsDefaultCellStyle 5. DataGridViewColumn.DefaultCellStyle6. DataGridView.DefaultCellStyle

重要的是要清楚:样式对象不是以“全有/全无”的方式应用的,datagridview会检查每个属性。例如,假设您的单元格使用 DataGridViewCell.Style属性来应用自定义字体,但没有设置自定义前景色。结果,该字体设置将覆盖任何其他样式对象中的字体信息,但如果层次结构中下一个样式对象的前景色不为空,则将从该对象继承前景色(在这种情况下为 DataGridViewRow.DefaultCellStyle)。

datagridviewcellstyle定义了两种格式设置:数据和外观。数据格式设置描述显示数据绑定值之前如何对其进行修改。这种格式设置通常包括使用格式设置字符串将数字或日期值转换为文本。要使用数据格式设置,只需使用 DataGridViewCellStyle.Format属性设置格式定义或自定义格式字符串即可。

例如,以下代码片段对 UnitCost字段中的所有数字进行格式设置,以将它们显示为货币值,保留两位小数并加上在区域设置中定义的相应货币符号:

DataGridView1.Columns("UnitCost"). _DefaultCellStyle.Format="C"

外观格式设置包括颜色和格式等表面细节。例如,以下代码右对齐 UnitCost字段、应用粗体并将单元格的背景更改为黄色:

DataGridView1.Columns("UnitCost"). _DefaultCellStyle.Font= _New Font(DataGridView.Font, FontStyle.Bold)DataGridView1.Columns("UnitCost"). _DefaultCellStyle.Alignment= _DataGridViewContentAlignment.MiddleRightDataGridView1.Columns("UnitCost"). _DefaultCellStyle.BackColor= Color.LightYellow

其他与格式设置相关的属性包括 ForeColor、SelectionForeColor、SelectionBackColor、WrapMode(控制文本在空间允许时是跨越多行还是直接截断)及 NullValue(将替代 Null值的值)。

datagridview还包括一个设计器,用于在设计时配置列样式。只需从“Properties”(属性)窗口中选择“DataGridView Properties”(DataGridView属性)链接,或者从各种预先创建的样式设置中选择“AutoFormat”(自动套用格式)。

自定义单元格格式

单元格格式设置的第一种方法是设置更高级别的 DataGridView、DataGridViewColumn和 DataGridViewRow属性。但是,有时您需要为特定单元格单独设置样式。例如,您可能需要在列中的数据大于或小于某个值时标记该列中的数据。例如,突出显示项目计划列表中已过去的到期日期,或者在销售分析中突出显示负收益率。在这两种情况下,您需要对单独的单元格进行格式设置。

了解 DataGridView对象模型后,您可能想要遍历特定列中的单元格集合,以寻找要突出显示的值。这种方法是可行的,但不是最好的方法。关键问题是如果用户编辑了数据,或者如果代码更改了绑定的数据源,不会对单元格的突出显示情况进行相应的更新。

幸运的是,datagridview针对此目的提供了 CellFormatting事件。CellFormatting只在显示单元格值之前引发。通过该事件,可以基于单元格的内容来更新单元格样式。以下示例检查特定的客户并相应地标记单元格:

Private Sub DataGridView1_CellFormatting( _ByVal sender As System.Object, _ByVal e As System.Windows.Forms. _DataGridViewCellFormattingEventArgs) _Handles DataGridView1.CellFormatting'检查该列是否正确。If DataGridView1.Columns(e.ColumnIndex).Name= _"CustomerID" Then'检查该值是否正确。If e.Value="ALFKI" Thene.CellStyle.ForeColor= Color.Rede.CellStyle.BackColor= Color.YellowEnd IfEnd IfEnd Sub

样式不是影响网格外观的唯一细节。您还可以隐藏列、在不同位置之间移动列,并“冻结”列,使这些列在用户滚动到右端时仍然可见。这些功能都是通过 DataGridViewColumn类的属性提供的,如下所述:

?

?

?

? minimumwidth:将 Resizable设置为 False,以防止用户调整列宽;或者将 MinimumWidth设置为允许的最小像素数目。

?

按钮列

datagridview提供的一种列是 DataGridViewButtonColumn,这种列在每一项旁边显示一个按钮。您可以响应此按钮的单击事件,并使用它启动其他操作或显示新的表单。

以下示例使用按钮文字“details...”创建简单的按钮列:

'创建按钮列。Dim Details As New DataGridViewButtonColumn()Details.Name="Details"'关闭数据绑定并显示静态文本。'(但是,您可以通过设置 DataPropertyName'属性来使用该表中的属性。)Details.DisplayTextAsFormattedValue= FalseDetails.Text="Details..."'清除标题。Details.HeaderText=""'添加该列。DataGridView1.Columns.Insert( _DataGridView1.Columns.Count, Details)

显示了包含新列的网格。以下代码会对任何行中的按钮单击事件做出反应,并显示相应的记录信息:

Private Sub DataGridView1_CellClick( _ByVal sender As System.Object, _ByVal e As System.Windows.Forms. _DataGridViewCellEventArgs) _Handles DataGridView1.CellClickIf DataGridView1.Columns(e.ColumnIndex).Name= _"Details" ThenMessageBox.Show("You picked"& _DataGridView1.Rows(e.RowIndex). _Cells("CustomerID").Value)End IfEnd Sub

比较现实的方案是,在此时创建并显示一个新窗口,并将有关选定记录的信息传递到这个新窗口,以便查询并显示完整的信息。

图像列

datagridview提供的另一种列是 DataGridViewImageColumn,这种列将在单元格边框内显示一个图片。您可以设置 DataGridViewImageColumn.Layout属性以便配置图片在单元格中的显示方式:是将单元格扩展到适当的大小,还是将直接剪裁太大的图像。

使用 DataGridViewImageColumn的方法有两种。首先,您可以采用与 DataGridViewButtonColumn相同的方式手动创建并添加该列。如果您需要显示 DataSet本身不提供的相关图像信息,则此列非常有用。例如,您可能需要获取文件名(如 ProductPic002.gif),从网络驱动器读取相应的文件,然后在网格中显示该文件。为完成此操作,您需要对 DataGridView事件(如 CellFormatting)做出反应,以便读取相应行的图片、获取图像数据并使用该列中的 Value属性将其插入。

如果 DataSet包含不需要任何手动操作的二进制图片数据,那么事情会变得更加简单。例如 SQL Server Pubs数据库中的 pub_info表,该表包含公司徽标。绑定至此表时,您不需要执行任何额外步骤,DataGridView将自动识别出您正在使用图像,并会创建所需的 DataGridViewImageColumn。(有关这项技术的示例,请参阅本文的下载内容。)

编辑 DataGridView

众所周知,datagrid的用户输入功能很不灵活,您几乎没有办法自定义单元格验证方式及错误报告方式。而另一方面,DataGridView允许您通过对在编辑过程的所有阶段中引发的大量不同事件做出反应来控制其行为。

默认情况下,当用户用鼠标双击单元格或按 F2键时,DataGridView单元格将进入编辑模式。您还可以通过将 DataGridView.EditCellOnEnter属性设置为 True,对 DataGridView进行配置,以便当用户移到该单元格后,该单元格立即切换到编辑模式。您还可以使用 DataGridView的 BeginEdit()、CancelEdit()、CommitEdit()和 EndEdit()方法通过编程方式开始和停止单元格编辑。用户编辑单元格时,行标题将显示一个铅笔状的编辑图标。

用户可以通过按 Esc键来取消编辑。如果将 EditCellOnEnter属性设置为 True,则单元格仍将处于编辑模式,但是所有更改都将被放弃。要提交更改,用户只需移到新的单元格,或将焦点切换到其他控件。如果您的代码可以移动当前单元格的位置,则此代码也会提交更改。

为防止单元格被编辑,可以设置 DataGridViewCell、DataGridViewColumn、DataGridViewRow或 DataGridView的 ReadOnly属性(取决于您是要防止对该单元格进行更改、对该列中的所有单元格进行更改、对该行中的所有单元格进行更改,还是要防止对该表中的所有单元格进行更改)。DataGridView还提供了 CellBeginEdit事件,用于取消尝试的编辑。

处理错误

默认情况下,datagridviewtextboxcolumn允许用户输入任何字符,包括当前单元格中可能不允许使用的那些字符。例如,用户可以在数字字段中键入非数字字符,也可以指定与 DataSet中定义的 ForeignKeyConstraint或 UniqueConstraint冲突的值。DataGridView采用不同的方式来处理这些问题:

?

?

这些处理方式适用于大多数情况。但是,如果需要,您也可以通过响应 DataGridView.DataError事件来参与错误处理,该事件是在 DataGridView侦听到来自数据源的错误时引发的。

验证输入

验证是一项与错误处理稍有不同的任务。通过错误处理,您可以处理由 DataSet报告的问题。而通过验证,您可以捕获您自己定义的错误情况,例如 DataSet中允许的数据在应用程序中却没有意义。

当用户通过导航到新的单元格提交更改时,datagridview控件将引发 CellValidating和 CellValidated事件。这些事件之后是 RowValidating和 RowValidated事件。您可以响应这些事件,检查用户输入的值是否正确,并执行所需的任何后期处理。如果值无效,通常您会通过两种方式来做出响应,即取消更改和单元格导航(通过将 EventArgs对象的 Cancel属性设置为 True),或者设置某种错误文本来提醒用户。可以将错误文本置于其他控件中,也可以使用相应的 DataGridViewRow和 DataGridViewCell的 ErrorText属性在 DataGrid中显示错误文本:

?

?

通常,您会结合使用这两种属性,并设置行和单元格中的错误消息。以下示例检查 CompanyName字段中太长的文本输入。如果发现有问题的值,则会将错误符号(红色的感叹号)添加到单元格中,并显示描述该问题的工具提示文本。

Private Sub DataGridView1_CellValidating( _ByVal sender As System.Object, _ByVal e As System.Windows.Forms. _DataGridViewCellValidatingEventArgs) _Handles DataGridView1.CellValidatingIf DataGridView1.Columns(e.ColumnIndex).Name= _"CompanyName" ThenIf CType(e.FormattedValue, String).Length> _50 ThenDataGridView1.Rows( _e.RowIndex).Cells(e.ColumnIndex). _ErrorText= _"The company name is too long."End IfEnd IfEnd Sub

表列约束选择

使用验证可以捕获任何错误情况。但是,这种方法不一定是最好的,因为它允许用户输入无效的内容,然后在事实出现后尝试改正无效输入。更好的解决方案是使用户在一开始就无法输入任何无效的内容。

一个常见例子就是您需要将列限制在预定义值列表的范围内。在此示例中,对于用户而言,最简单的办法是从列表中选择正确的值,而不要手动键入值。最大的优势在于,您可以使用 DataGridViewComboBoxColumn非常方便地实现此设计。

可以使用 Items集合手动为 DataGridViewComboBoxColumn添加项列表,就像使用 ListBox一样。此外,还可以将 DataGridViewComboBoxColumn绑定到其他数据源。在这种情况下,您可以使用 DataSource属性来指定数据源,并使用 DisplayMember属性指示列中应显示的值,以及使用 ValueMember属性指定底层列值应使用的值。

为了演示这种情况,来看看下一个有关 Products表的示例。此表中的每一条记录都通过其 CategoryID字段链接至 Categories表中的记录。要更改产品类别,用户需要记住正确的 ID,并将其输入到 CategoryID字段中。更好的解决方案是使用与 Categories表绑定的 DataGridViewComboBoxColumn。此列将使用 CategoryName作为显示值,但是会将 CategoryID作为真正的底层值。此列仍将通过 DataPropertyName属性与 Products表绑定在一起,这意味着当用户从列表中选择新的 Category时,产品记录的 CategoryID字段将自动更改。

以下是配置此表所需的代码:

'删除自动生成的 CategoryID列。DataGridView1.Columns.Remove("CategoryID")'为 CategoryID创建列表列。Dim List As New DataGridViewComboBoxColumn()List.DisplayIndex= 0List.HeaderText="Category"'此列绑定至' Products.CategoryID字段。List.DataPropertyName="CategoryID"'该列表将从 Categories表获得数据。List.DataSource= ds.Tables("Categories")List.DisplayMember="CategoryName"List.ValueMember="CategoryID"'添加该列。DataGridView1.Columns.Add(List)

小结

本文概要介绍了最值得期待的.NET新控件之一:DataGridView。与 DataGrid不同的是,DataGridView适用于各种不同的现实情况——无论是要处理数据绑定和用户编辑,还是仅涉及静态文本显示,都可以采用 DataGridView。简而言之,本文让您近距离了解了.NET Framework提供的一体化数据解决方案,以及 Windows窗体开发人员升级至.NET 2.0的最引人注目的原因之一。

有关 Visual Studio.NET Developer和 Pinnacle Publishing的详细信息,请访问它们的 Web站点 http://www.pinpub.com/。

注意:这不是 Microsoft Corporation的 Web站点。Microsoft对其内容不承担任何责任。

本文转载自 2005年 1月份的 Visual Studio.NET Developer。

c#中data有哪些类

N多,这是4.0的:

System.Data

AcceptRejectRule枚举

CommandBehavior枚举

CommandType枚举

ConflictOption枚举

ConnectionState枚举

Constraint类

ConstraintCollection类

ConstraintException类

DataColumn类

DataColumnChangeEventArgs类

DataColumnChangeEventHandler委托

DataColumnCollection类

DataException类

DataRelation类

DataRelationCollection类

DataRow类

DataRowAction枚举

DataRowBuilder类

DataRowChangeEventArgs类

DataRowChangeEventHandler委托

DataRowCollection类

DataRowComparer类

DataRowComparer(TRow)类

DataRowExtensions类

DataRowState枚举

DataRowVersion枚举

DataRowView类

DataSet类

DataSetDateTime枚举

DataSetSchemaImporterExtension类

DataSysDescriptionAttribute类

DataTable类

DataTableClearEventArgs类

DataTableClearEventHandler委托

DataTableCollection类

DataTableExtensions类

DataTableNewRowEventArgs类

DataTableNewRowEventHandler委托

DataTableReader类

DataView类

DataViewManager类

DataViewRowState枚举

DataViewSetting类

DataViewSettingCollection类

DBConcurrencyException类

DbType枚举

DeletedRowInaccessibleException类

DuplicateNameException类

EntityCommandCompilationException类

EntityCommandExecutionException类

EntityException类

EntityKey类

EntityKeyMember类

EntitySqlException类

EntityState枚举

EnumerableRowCollection类

EnumerableRowCollection(TRow)类

EnumerableRowCollectionExtensions类

EvaluateException类

FillErrorEventArgs类

FillErrorEventHandler委托

ForeignKeyConstraint类

IColumnMapping接口

IColumnMappingCollection接口

IDataAdapter接口

IDataParameter接口

IDataParameterCollection接口

IDataReader接口

IDataRecord接口

IDbCommand接口

IDbConnection接口

IDbDataAdapter接口

IDbDataParameter接口

IDbTransaction接口

IExtendedDataRecord接口

InRowChangingEventException类

InternalDataCollectionBase类

InvalidCommandTreeException类

InvalidConstraintException类

InvalidExpressionException类

IsolationLevel枚举

ITableMapping接口

ITableMappingCollection接口

KeyRestrictionBehavior枚举

LoadOption枚举

MappingException类

MappingType枚举

MergeFailedEventArgs类

MergeFailedEventHandler委托

MetadataException类

MissingMappingAction枚举

MissingPrimaryKeyException类

MissingSchemaAction枚举

NoNullAllowedException类

ObjectNotFoundException类

OperationAbortedException类

OptimisticConcurrencyException类

OrderedEnumerableRowCollection(TRow)类

ParameterDirection枚举

PropertyAttributes枚举

PropertyCollection类

ProviderIncompatibleException类

ReadOnlyException类

RowNotInTableException类

Rule枚举

SchemaSerializationMode枚举

SchemaType枚举

SerializationFormat枚举

SqlDbType枚举

StateChangeEventArgs类

StateChangeEventHandler委托

StatementCompletedEventArgs类

StatementCompletedEventHandler委托

StatementType枚举

StrongTypingException类

SyntaxErrorException类

TypedDataSetGenerator类

TypedDataSetGeneratorException类

TypedTableBase(T)类

TypedTableBaseExtensions类

UniqueConstraint类

UpdateException类

UpdateRowSource枚举

UpdateStatus枚举

VersionNotFoundException类

XmlReadMode枚举

XmlWriteMode枚举

文章分享到这里,希望我们关于uniqueconstraint的内容能够给您带来一些新的认识和思考。如果您还有其他问题,欢迎继续探索我们的网站或者与我们交流,我们将尽力为您提供满意的答案。

已备案域名注册,我有一个域名已经备案了,我想备案下一个域名怎么弄提交更改,志愿填报提交后可以修改吗