我正在使用桌面应用程序(VB.NET)。我有一个Dev Express Xtra Grid的表格。在网格中,我有第一列作为未绑定的复选框(存储库项)。现在我已经创建了这个功能,以便用户可以选中/取消选中复选框以选择行。
我想要实现的目标是:
我在表单上有一个按钮。如果未选中复选框,则应禁用该按钮,否则应启用该按钮。默认情况下,在加载表单时,会选中所有复选框,因此启用了按钮。用户可以取消选中所有复选框。那么我怎样才能找到是否选中了一个复选框来启用/禁用按钮。
在按钮点击事件中,我想获取已选中复选框的所有行的ID(这是复选框旁边的网格中的列)。
我确实认为我必须首先为网格中的所有行创建for循环,然后循环选中复选框以查找是否选中了复选框。但不是把它放在一起。
请帮助我们解决问题。
由于
答案 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获得的一些更方便的方法和属性是FocusedRowHandle
,FocusedColumn
,GetFocusedRow()
等。
因此,当您为该按钮注册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有一个小的学习曲线,但一旦你得到它,它很容易。