说明:
我有一个网格视图,其中包含RepositoryItemCheckEdit列和RepositoryItemTextEdit列,网格视图包含Item Id
,Bar code
,Pack Id
等列等
1)RepositoryItemCheckEdit
相同的Item Id
和bar 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行保持不变...
答案 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);
}
}