WinForm DevExpress Xtragrid以编程方式检查网格视图中的指定复选框列

时间:2014-10-31 12:12:16

标签: c# winforms repository devexpress xtragrid

说明:

我有一个网格视图,其中包含RepositoryItemCheckEdit列和RepositoryItemTextEdit列,网格视图包含Item IdBar codePack Id等列等

1)RepositoryItemCheckEdit

相同的Item Idbar code可以在网格视图中显示多个具有不同pack id的项目。

我需要的是,如果用户在网格视图中选中任何一个项目ID复选框,则意味着我需要检查或取消选中所有相关的复选框行。用户可以选择第一个复选框或最后一个复选框,然后根据用户选择需要选中或取消选中相关的复选框

2)RepositoryItemTextEdit

与相似的复选框列编辑,文本编辑列编辑需要工作,例如如果用户在项目ID列中输入100单元格值意味着相应的项目ID行也应该被指定为100,如下所示< / p>

 void repchkCheckbox_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
    {
                DataTable dt_check = new DataTable();
                dt_check = (DataTable)gcItemMaster.DataSource;
                Int64 sItemId = Convert.ToInt64(gvItemMaster.GetRowCellValue(gvItemMaster.FocusedRowHandle, gvItemMaster.Columns["ItemID"]));
                bool bDiscount = Convert.ToBoolean(e.Value);
                int iItemcount = (from DataRow row in dt_check.Rows where (string)row["ItemID"] == "1" select row).Count();
                int iRowHandle = gvItemMaster.FocusedRowHandle;
                for (int i = 0; i < iItemcount; i++)
                {
                    if (bDiscount)
                        gvItemMaster.SetRowCellValue(iRowHandle, gvItemMaster.Columns["AllowDiscount"], true);
                    else
                        gvItemMaster.SetRowCellValue(iRowHandle, gvItemMaster.Columns["AllowDiscount"], false);

                    iRowHandle++;
                }
         }

说明性目的:如果我在gridview中包含5行,具有相同的itemid但不同的packid ...     如果我检查itemId的第一行复选框意味着我可以通过递增rowhandle值轻松地填充剩余的复选框,如第2,第3,第4,第5    但我的问题是假设我检查3行gridview Itemid复选框意味着我只能填充第4和第5行复选框状态..但第1和第2行保持不变...

2 个答案:

答案 0 :(得分:0)

您的数据表中是否有一个字段来表示已检查状态?

如果你这样做,那么你实际上并不需要通过网格。您只需从数据表中选择具有匹配ID的行,并将相关列设置为每个数据行所需的值。更改将自动反映在网格中。

答案 1 :(得分:0)

我找到了解决方案它完美无缺:

                     Int64 iItemId = Convert.ToInt64(gvItemMaster.GetRowCellValue(e.RowHandle, "ItemID"));
                     bool bDiscount = Convert.ToBoolean(e.Value);

                for (int i = 0; i < gvItemMaster.DataRowCount; i++)
                {
                    Int64 id = Convert.ToInt64(gvItemMaster.GetRowCellValue(i, "ItemID"));
                    if (id == iItemId)
                    {
                        if (bDiscount)
                            gvItemMaster.SetRowCellValue(i, gvItemMaster.Columns[""+sColumn.Replace(" ","")+""], true);
                        else
                            gvItemMaster.SetRowCellValue(i, gvItemMaster.Columns[""+sColumn.Replace(" ","")+""], false);
                    }
                }   
相关问题