Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何查找在DevExpress XtraGrid中选中的复选框?_Vb.net_Checkbox_Devexpress_Xtragrid - Fatal编程技术网

Vb.net 如何查找在DevExpress XtraGrid中选中的复选框?

Vb.net 如何查找在DevExpress XtraGrid中选中的复选框?,vb.net,checkbox,devexpress,xtragrid,Vb.net,Checkbox,Devexpress,Xtragrid,我正在开发一个桌面应用程序(VB.NET)。我有一个关于devexpressxtra网格的表单。在网格中,我有第一列作为未绑定复选框(存储库项)。现在,我已经创建了该功能,以便用户可以选中/取消选中复选框来选择行 我想要实现的是: 我在表格上有一个按钮。如果未选中任何复选框,则应禁用该按钮,否则应启用该按钮。默认情况下,加载表单时,选中所有复选框,因此按钮处于启用状态。用户可以取消选中所有复选框。因此,我如何才能找到是否选中了任何一个复选框以启用/禁用按钮 在button click事件中,我想

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

我想要实现的是:

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

  • 在button click事件中,我想获取选中复选框的所有行的id(这是网格中复选框旁边的列)

  • 我的想法是,我必须首先对网格中的所有行进行for循环,然后对复选框进行for循环,以确定复选框是否选中。然而,并没有把它放在一起

    请帮我解决这个问题

    谢谢

    我对“Dev Express Xtra Grid”不太清楚。如果你使用数据网格

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

    现在,您可以使用for循环,该循环将继续循环,直到网格中的行数增加为止

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

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

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

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

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


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

    如果使用XtraGrid GridControl,则需要更多地处理GridView,它是GridControl中包含的编辑器

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

    通过GridView获得的一些更方便的方法和属性有
    FocusedRowHandle
    FocusedColumn
    GetFocusedRow()
    ,等等

    因此,当您为该按钮注册单击事件时,在该方法内存储对gridview的引用,即

    private void somebutton单击(对象发送方,事件参数e)
    {
    var gridView=this.WhateYourGridViewisNamedGridView;
    //现在,您可以访问gridView的方法和属性。。。
    //假设您想要获得聚焦行的句柄
    var rowHandle=gridView.FocusedRowHandle;
    //或者,在您的情况下,如果您希望遍历行或列。。。
    for(gridView.Columns中的GridColumn列)
    {
    如果(条件)
    {
    //做点什么
    }
    }
    }
    
    根据您的场景,我建议您再次打开设计器。在左下角,单击在位编辑器存储库。您应该在此处看到您的
    复选框编辑。如果选择
    复选框编辑
    ,您应该能够单击小闪电并访问编辑器的事件。您希望注册
    CheckStateChanged
    事件或
    CheckedChanged
    事件,该事件将在编辑器的任何检查状态更改时触发

    从这里开始,我将向您的域对象或viewmodel添加一个bool,以便在
    isChecked
    中用bool装饰该域对象。这样,当check事件触发时,您可以处理设置此bool。。。例如:

    private void CheckEventFiring(对象发送方,EventArgs e)
    {
    //获取当前聚焦的行并将其投射到对象
    //这将公开所有属性,包括前面提到的布尔值
    var currentRow=gridView.GetFocusedRow()作为域对象;
    //基于选中状态。。。
    currentRow.IsChecked=//已选中或未选中
    }
    
    现在您已经设置好了,当您单击按钮时,您可以通过执行以下操作从网格控件的数据源中获取所有“已检查”的项

    var dataSource=gridControl.dataSource as List()。其中(x=>x.IsChecked);
    
    现在,您只有来自检查项目所在行的数据。如果未选中“检查状态”,则对象上的布尔值应为false,如果选中,则应为true


    让我知道这是否有意义。devexpress有一个很小的学习曲线,但是一旦你掌握了它,就很容易了

    谢谢你的信息。我确实有你在这里提到的相同想法,但我正在寻找一些代码来做到这一点。。。不管怎样,我已经解决了这个问题,并且能够解决上面所有的问题。。。