无法在带有复选框列的基础结构超wingrid上选择多行

本文关键字:wingrid 结构 选择 复选框 | 更新日期: 2023-09-27 18:20:31

我有下面的代码,它成功地将复选框列添加到了ultrawingrid中,我的问题是,当我通过选中Select列上的复选框进行选择时,ultrawingrid的所选行数不会更新,它仍然显示为零,我还想知道如何启用多复选框选择,即多行选择。。。

下面是代码。。。

private void grdPayVis_InitializeLayout(object sender,InitializeLayoutEventArgs e) 
 var gridBand = grdPayVis.DisplayLayout.Bands[0]; 
    if(!gridBand.Columns.Exists("Select"))
    gridBand.Columns.Add("Select", "Select");
gridBand.Columns["Select"].Header.VisiblePosition = 0; 
gridBand.Columns["Select"].Hidden = false; 
gridBand.Columns["Select"].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.CheckBox; 
gridBand.Columns["Select"].AutoSizeMode = ColumnAutoSizeMode.AllRowsInBand; 
gridBand.Columns["Select"].CellClickAction = CellClickAction.Edit; 

}

无法在带有复选框列的基础结构超wingrid上选择多行

我不确定你到底想实现什么。当您将选择列中的CellClickAction设置为编辑,然后单击该列中的任何单元格时,网格将选择单元格而不是行。Grid具有Selected属性,该属性公开三个集合——行、列和单元格。在您的情况下,您正在更改选定的单元格,而不更改选定的行集合。如果需要选择行,则需要将select列中的CellClickAction设置为RowSelect。如果您需要同时更改Select列的复选框状态,您可以处理网格的AfterSelectChange事件,如下所示:

private void grdPayVis_AfterSelectChange(object sender, AfterSelectChangeEventArgs e)
{
    if (e.Type == typeof(UltraGridRow))
    {
        foreach (UltraGridRow row in this.grdPayVis.Selected.Rows)
        {
            row.Cells["Select"].Value = true; // Or some value appropriate to your scenario
        }
        this.grdPayVis.UpdateData();
    }   

默认情况下,网格允许您选择许多单元格、行或列。但是,如果某个单元格处于编辑模式,则不能选择任何其他单元格。同样,当您将CellClickAction设置为编辑时,当您单击选择列中的任何单元格时,它将进入编辑模式,在退出编辑模式之前无法再选择任何单元格。

从数据库中读取数据表后,您可以将新列添加到数据表中

ds = new DataSet("PayCharge"); 
ds= obj.GetData(); 
DataColumn dc = new DataColumn("Select", typeof(boolean));
dc.DefaultValue = false;
ds.Tables[0].Columns.Add(dc);
grdVisPay.SetDataBinding(ds, "PayCharge");  
.....

现在,数据集中的第一个表有一个名为Select的未绑定列,当您将其设置为数据源时,您将能够像以前那样进行操作。但这一次,只要您触摸复选框,就会在底层数据表中设置True/False值。当您需要发现哪些是被检查的行时,您可以使用数据源,而不是网格。例如

void buttonSave_Click(object sender, EventArgs e)
{
     DataSet ds = grdVisPay.DataSource as DataSet;
     DataRows[] selectedRows = ds.Tables[0].Select("Select = True");
     foreach(DataRow row in selectedRows)
     {
         ... do whatever you need with the selected row...
     }
}