0

我正在开发一个桌面应用程序(VB.NET)。我有一个带有 Dev Express Xtra Grid 的表格。在网格中,我将第一列作为未绑定复选框(存储库项)。现在我已经制作了该功能,以便用户可以选中/取消选中复选框以选择行。

我想要实现的是:

  1. 我在表格上有一个按钮。如果未选中复选框,则应禁用该按钮,否则应启用该按钮。默认情况下,当表单加载时,所有复选框都被选中,因此按钮被启用。用户可以取消选中所有复选框。那么我如何才能找到是否选中了任何一个复选框以使按钮启用/禁用。

  2. 在按钮单击事件中,我想获取选中复选框的所有行的 id(这是复选框旁边的网格中的列)。

我确实有这样的想法,我必须首先为网格中的所有行创建 for 循环,然后为复选框创建 for 循环,以找到选中的复选框。但是没有把它放在一起。

请帮我解决这个问题。

谢谢

4

2 回答 2

0

如果您正在使用 XtraGrid GridControl,您希望更多地处理 GridView,它是 GridControl 中包含的编辑器。

通常,您会将数据绑定到 GridControl 的 DataSource 属性,但您想要用于用户体验的大多数其他事件和属性将与 GridView 本身相关。

使用 GridView 获得的一些更方便的方法和属性是FocusedRowHandleFocusedColumnGetFocusedRow()等。

因此,当您为该按钮注册单击事件时,在该方法内,存储对 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 有一个小的学习曲线,但是一旦你掌握了它,它就很容易了。

于 2013-08-06T02:03:55.100 回答
0

我不确定“Dev Express Xtra Grid”。如果你仍然使用数据网格

首先声明并初始化一个变量,例如,flag - false,为 false

现在你可以使用一个 for 循环继续循环直到网格中的行数

在循环内,你检查“当前列”的复选框是否被选中

if Checked 然后将标志设置为 true 并从循环中中断 else 继续循环

在循环检查当前标志值后,如果 flag=false 则禁用该按钮,否则启用该按钮。

对于您的第二个问题,请执行相同的循环并

内部循环检查是否检查当前行,如果为真,则取 id 列的值,否则继续。

我认为这个逻辑可以帮助你。:)

于 2012-11-02T08:42:18.070 回答