【发布时间】:2015-10-29 03:28:35
【问题描述】:
我使用 .Net 框架 4.0 和 WinForm 应用程序组件DataGridView 并设置DataSource 和DataTable。然后有一个按钮可以将行添加到DataGridView。
这样的代码。
gridTable = (DataTable)dgrMainGrid.DataSource;
DataRow dr = gridTable.NewRow();
在将 New Row 添加到 DataTable 之前,我检查了是否有重复的行。为此,我使用了 LINQ Query。
//Item Code cannot duplicate
var results = from itmCode in gridTable.AsEnumerable()
where (itmCode.Field<string>("Item Code") == txtGrdItmLoc.Text)
select itmCode;
之后我如何检查数据表中是否存在重复行?
if(//doWhatever function here ){
//if there's duplicate row values
isNotDuplicate = false;
}
else{
isNotDuplicate=true;
}
在进行以下步骤之前我需要获取 是否有重复并将其设置为 isNotDuplicate 变量或类似的东西来检查。所以我想数results 行,但没有这样的函数来计算 'var results`,有可能这样做吗?
if (!isDuplicate)
{
dr["#"] = true;
dr["Item Code"] = lSysItemCode;
dr["Stock Code"] = txtGdrItmItemLoc.Text;
dr["Brand"] = txtGrdItmBrand.Text;
dr["Model No"] = cmbGrdItmModel.SelectedValue.ToString();
gridTable.Rows.Add(dr);
dgrMainGrid.DataSource = gridTable;
}
我可以使用
for loop和DataTable并检查它是否包含等于 "Item Code" 的新值,但我正在寻找 linq 的替代方法。
我只是在寻找使用 linq 的替代品。
foreach (DataRow r in gridTable.Rows) {
if (r["Item Code"].ToString() == txtGrdItmLoc.Text) {
isDuplicate = true;
}
}
【问题讨论】:
-
gridTable.AsEnumerable().GroupBy(g => g.Field<string>("Item Code")).Where(g => g.Count() > 0)将返回您的副本。 -
复制为..?所有具有相同
Item Code的行? -
当我添加新项目时,我需要在数据表列“项目代码”中检查该项目
-
@Jimmer - 好的,那么我回答中的第一个查询应该适合你。