【问题标题】:How to find which check boxes are checked within DevExpress XtraGrid?如何在 DevExpress XtraGrid 中找到选中的复选框?
【发布时间】:2012-11-02 06:44:04
【问题描述】:

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

我想要实现的是:

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

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

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

请帮我解决问题。

谢谢

【问题讨论】:

    标签: vb.net checkbox devexpress xtragrid


    【解决方案1】:

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

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

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

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

    if 检查然后将标志设置为 true 并从循环中中断 否则继续循环

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

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

    inside loop 检查当前行是否被检查 如果为真,则取 id 列的值 否则继续。

    我认为这个逻辑可能会对你有所帮助。 :)

    【讨论】:

    • 感谢您的信息。我确实有你在这里提到的同样的想法,但我正在寻找一些代码来这样做......没关系我已经解决了这个问题并且能够解决上述所有问题......
    【解决方案2】:

    如果您使用 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 事件,这将在编辑器的任何检查状态发生更改时触发。

    从这里开始,我将向您的域对象或视图模型添加一个布尔值,以在其上为isChecked 用布尔值装饰该域对象。这样,当 check 事件触发时,您可以处理设置此布尔值...例如:

    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 有一个小的学习曲线,但是一旦你掌握了它,它就很容易了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-26
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      相关资源
      最近更新 更多