我有下面的代码,它成功地将复选框列添加到了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;
}
我不确定你到底想实现什么。当您将选择列中的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...
}
}