如果您正在使用 XtraGrid GridControl,您希望更多地处理 GridView,它是 GridControl 中包含的编辑器。
通常,您会将数据绑定到 GridControl 的 DataSource 属性,但您想要用于用户体验的大多数其他事件和属性将与 GridView 本身相关。
使用 GridView 获得的一些更方便的方法和属性是FocusedRowHandle
、FocusedColumn
、GetFocusedRow()
等。
因此,当您为该按钮注册单击事件时,在该方法内,存储对 gridview 的引用,即
private void SomeButtonClick(object sender, EventArgs e)
{
var gridView = this.whateverYourGridViewIsNamedGridView;
//Now, you can access the methods and properties of the gridView...
//Say you want to obtain the focused row's handle
var rowHandle = gridView.FocusedRowHandle;
//Or, in your case, if you want to iterate through the rows or columns...
for(GridColumn column in gridView.Columns)
{
if(condition)
{
//Do something
}
}
}
根据您的情况,我建议您再次打开设计器。在左下角,单击就地编辑器存储库。你应该在CheckEdit
这里看到你的。如果您选择CheckEdit
,您应该能够单击小闪电并访问编辑器的事件。您想注册CheckStateChanged
事件或CheckedChanged
事件,只要编辑器的任何检查状态发生更改,就会触发该事件。
从这里开始,我将向您的域对象或视图模型添加一个 bool 来装饰该域对象,并在其上使用 bool for isChecked
. 这样,当检查事件触发时,您可以处理设置此布尔值...例如:
private void CheckEventFiring(object sender, EventArgs e)
{
//Get the currently focused row and cast it to your object
//This will expose all the properties, including the aforementioned boolean value
var currentRow = gridView.GetFocusedRow() as YourDomainObject;
//Based on checked state...
currentRow.IsChecked = //Checked or Unchecked
}
现在您已经设置了这个,当您单击按钮时,您可以通过执行类似的操作从网格控件的数据源中获取“已检查”的所有项目...
var dataSource = gridControl.DataSource as List<YourDomainObject>().Where(x => x.IsChecked);
现在您只有检查项目的行中的数据。当检查状态未选中时,对象上的布尔值应为假,选中时应为真。
让我知道这是否有意义。Dev Express 有一个小的学习曲线,但是一旦你掌握了它,它就很容易了。