【问题标题】:WinForm DevExpress Xtragrid programmatically to check Specified check box column in grid viewWinForm DevExpress Xtragrid 以编程方式检查网格视图中的指定复选框列
【发布时间】:2014-10-31 12:12:15
【问题描述】:

解释:

我有一个网格视图,其中包含 RepositoryItemCheckEdit 列和 RepositoryItemTextEdit 列,网格视图包含 Item Id、Bar code、Pack Id 等列

1)RepositoryItemCheckEdit

相同的Item Id 和bar code 可以在网格视图中出现多个具有不同pack id 的项目。

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

2)RepositoryItemTextEdit

与复选框列编辑,文本编辑列编辑相同,例如如果用户在项目id列单元格值中输入100,则相应的项目id行也应分配为100,如下所示

 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 行保持不变...

【问题讨论】:

  • 那么到目前为止,您尝试过什么?有什么努力吗?你遇到过什么问题?
  • 很抱歉,您在实施此操作时无法看到任何已解释的问题。

标签: c# winforms repository devexpress xtragrid


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我找到了解决方案,效果很好:

                         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);
                        }
                    }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2011-07-06
      相关资源
      最近更新 更多