如何在DevExpress XtraGrid中查找哪些复选框?

时间:2012-11-02 06:44:04

标签: vb.net checkbox devexpress xtragrid

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

我想要实现的目标是:

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

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

  3. 我确实认为我必须首先为网格中的所有行创建for循环,然后循环选中复选框以查找是否选中了复选框。但不是把它放在一起。

    请帮助我们解决问题。

    由于

2 个答案:

答案 0 :(得分:0)

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

仍然

首先声明并初始化变量say,flag - false,为false

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

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

如果 选中,则将标志设置为true并从循环中断   其他 继续循环

循环检查当前标志值后

  如果flag = false则禁用该按钮   否则启用按钮。

对于你的第二个问题,做同样的循环和

内部循环检查当前行是否被选中   如果为true则取id列的值   否则继续。

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

答案 1 :(得分:0)

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

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

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

因此,当您为该按钮注册click事件时,在该方法中,存储对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
          }
     }
}

根据您的情况,我建议您再次打开Designer。在左下角,单击“就地编辑器存储库”。你应该在这里看到你的CheckEdit。如果选择CheckEdit,您应该可以单击小闪电并访问编辑器的事件。您希望注册CheckStateChanged事件或CheckedChanged事件,该事件将在编辑器的任何检查状态发生更改时触发。

从这里开始,我会在您的域对象或视图模型中添加一个bool,用isChecked为其添加bool。这样,当检查事件触发时,您可以处理设置此bool ...例如:

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);

现在,您只拥有检查项目的行中的数据。取消选中检查状态时,对象上的bool应该为false,选中时应该为true。

让我知道这是否有意义。 Dev Express有一个小的学习曲线,但一旦你得到它,它很容易。