使用由视图或绑定数据源提供的方法,可以获取并设置单元格的取值。 第一种方式允许编写可应用于不同数据源的插件代码。 第二种方式能更快速地访问单元格的取值。
那些没有实现 IBindingList 接口的数据源不支持更改通知。 因此,如果要通过那种数据源修改单元格的取值,则网格控件将不能反射到所作出的更改,需要人工更新网格。 更多信息,请参阅 刷新网格控件 文档。
要获取或设置单元格的取值,则需要使用相应的行和列来标识单元格。 行是通过句柄来标识的 (可以获取,如 行与卡片识别、遍历行 和 行定位 主题中所描述的那样)。 访问和识别列 主题描述了如何获取所需的列对象。
本主题由下列小节组成:
获取单元格的取值
XtraGrid 提供了下列方法来获取单元格的取值:
方法 | 说明 |
---|---|
ColumnView.GetFocusedValue | 返回当前获得当前焦点的单元格中的编辑值。
获得焦点的单元格是由获得焦点的列 (通过 ColumnView.FocusedColumn 属性指定) 和获得焦点的行 (通过 ColumnView.FocusedRowHandle 属性指定) 标识的。 |
ColumnView.GetFocusedRowCellValue | 返回获得焦点的行中特定列的编辑值。
由 ColumnView.FocusedRowHandle 属性标识获得焦点的行。 |
ColumnView.GetRowCellValue | 返回视图内任何单元格的编辑值。 通过在视图内的索引来标识目标行。 |
ColumnView.GetListSourceRowCellValue | 从数据源的行中返回单元格取值。 通过在数据源内的索引来标识目标行。 |
ColumnView.EditingValue | 返回当前的编辑值。 如果没有单元格被编辑,则该属性返回 null (在 Visual Basic 中为 Nothing)。
可以使用 BaseView.IsEditing 属性来确定单元格是否正在编辑。 要获取当前活动的编辑器,则使用 BaseView.ActiveEditor 属性。 |
ColumnView.GetFocusedRowCellValue 和 ColumnView.GetRowCellValue 方法的列参数可以由特定的 GridColumn 对象标识,或通过表示列的字段名称 (字符串) 来标识。
要通过 ColumnView.GetRowCellValue 方法获取单元格的取值,则也需要标识包含所需单元格的行。 该行是由表示它在视图内的可视位置的句柄来标识的。 要获得更多关于行句柄的信息,请参阅 行与卡片识别 文档。
所有这些方法都返回单元格取值的 对象 表示形式,因此在需要时应执行类型转换。示例 1
下面的示例代码可以用于获取 ID 列中第三个数据行 (该行的句柄等于 2) 的取值。
C# | 复制代码 |
---|---|
string cellValue; cellValue = gridView1.GetRowCellValue(2, "ID").ToString(); |
Visual Basic | 复制代码 |
---|---|
Dim CellValue As String CellValue = GridView1.GetRowCellValue(2, "ID") |
下列方法可以用于获取单元格的显示值。 GridColumn.DisplayFormat 属性可以用于指定编辑值如何转换为显示值。 要获得关于格式设置的信息,请参阅 设置单元格取值的格式 文档。
方法 | 说明 |
---|---|
ColumnView.GetFocusedDisplayText | 返回获得焦点的单元格的显示文本。 |
ColumnView.GetFocusedRowCellDisplayText | 返回获得焦点的行中某个单元格的显示文本。 |
ColumnView.GetRowCellDisplayText | 返回视图内任何单元格的显示值。 |
示例 2
下面的示例代码可以用于获取获得焦点的单元格中的显示文本。
C# | 复制代码 |
---|---|
string cellValue = gridView1.GetFocusedDisplayText();
|
Visual Basic | 复制代码 |
---|---|
Dim nellValue As String = GridView.GetFocusedDisplayText() |
也可以使用由网格控件的数据源提供的方法,来获取单元格的取值。 例如 ColumnView.GetRow、ColumnView.GetDataRow、ColumnView.GetFocusedRow 和 ColumnView.GetFocusedDataRow 方法返回表示数据源行的对象。 在获取行之后,使用它们的方法就可以返回字段值。
可以使用 ColumnView.GetRow 和 ColumnView.GetFocusedRow 方法,而不管数据源的类型如何。
ColumnView.GetDataRow、ColumnView.GetFocusedDataRow 方法可以在数据源为 DataTable 或 DataView 时使用。 在这种情况下,行由 DataRow 对象表示,并且 GetDataRow (GetFocusedDataRow) 方法返回类型转换为 DataRow 之后的行。
示例 3
下面的示例代码可以用于返回获得焦点行的第一列的取值。
C# | 复制代码 |
---|---|
System.Data.DataRow row = gridView1.GetDataRow(gridView1.FocusedRowHandle);
string cellValue = row[0].ToString();
|
Visual Basic | 复制代码 |
---|---|
Dim row As System.Data.DataRow = GridView1.GetDataRow(GridView1.FocusedRowHandle) Dim CellValue As String = row(0) |
设置单元格的取值
要设置特定单元格的编辑值,则可以使用下列由视图提供的方法:
方法 | 说明 |
---|---|
ColumnView.SetFocusedValue | 把值指派到当前获得焦点的单元格。 |
ColumnView.SetFocusedRowCellValue | 把值指派到获得焦点的行中特定的单元格。 |
ColumnView.SetRowCellValue | 把值指派到视图内的任何单元格。 |
ColumnView.EditingValue | 修改当前的编辑值。 如果没有单元格被编辑,则把值指派到 EditingValue 属性时没有效果。
可以使用 BaseView.IsEditing 属性来确定此刻是否有单元格被编辑。 要获取当前活动的编辑器,则使用 BaseView.ActiveEditor 属性。 |
这些方法中的行和列都使用与 ColumnView.GetFocusedRowCellValue 和 ColumnView.GetRowCellValue 方法相同的方式来标识 (请参阅下面)。
示例 4
下面的示例代码可以用于修改获得焦点的单元格的取值。
C# | 复制代码 |
---|---|
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.FocusedColumn, "New Value");
|
Visual Basic | 复制代码 |
---|---|
With GridView1 .SetRowCellValue(.FocusedRowHandle, .FocusedColumn, "New Value") End With |
可以使用 ColumnView.GetRow 和 ColumnView.GetDataRow 方法来获取表示特定行的对象。 然后,修改该行中的单元格取值,使用由数据行提供的功能。
示例 5
下面的示例代码可以用于设置获得焦点行中第一列的取值。
C# | 复制代码 |
---|---|
System.Data.DataRow row = gridView1.GetDataRow(gridView1.FocusedRowHandle);
row[0] = "New Value";
|
Visual Basic | 复制代码 |
---|---|
Dim row As System.Data.DataRow = GridView1.GetDataRow(GridView1.FocusedRowHandle) row(0) = "New Value" |
视图提供了几个处理单元格编辑的事件。 当最终用户键入或删除单元格中的字符时, ColumnView.CellValueChanging 事件发生。 在取值被修改并且编辑器被关闭之后, ColumnView.CellValueChanged 事件发生。 当通过代码修改单元格取值时,此事件也发生。 举例来说,如果需要使用所作出的更改来同步其他字段或控件,则可以接管该事件。 如果输入的取值需要被验证,可以接管验证事件 (BaseView.ValidatingEditor 和 ColumnView.ValidateRow)。 请参阅 验证编辑器 和 对行进行验证 文档获取详细信息。