在运行系统中的数据网格视图行单元格中显示结果?

时间:2011-05-20 07:47:21

标签: c# winforms linq datagridview

我将数据从Datatable加载到DatagridView,如下所示:

SerialNumber1 | Quantity | Issued Quantity | Status  |
    00001     |     1    |                 |         |
    00002     |     2    |                 |         | 

我有这个要求让我卡住了。

我需要查询数据数据网格视图记录,以验证加载的序列号是否与实际相同。 (也许通过使用linq - 如果我不正确,请纠正我)

例如:

var dgviewData = from a in gdview1.AsEnumerable()
                 where a<string>("SerialNumber").tostring() == txtserial.text
                 select a;

if(a.Count() > 0 )
{
    // Update Status of SerialNumber 00001 to Ok 
}
else
{
   //Error Serial Not Exist on Gridview
}

如果DGview上的SerialNumbers在扫描的实际序列中相同,则状态将仅在datagridview行单元格的运行时更新。

例如:DGview serial = 00001 ---&gt;实际单位扫描= 00001

SerialNumber1 | Quantity | Issued Quantity | Status  |
    00001     |     1    |        1        |   Ok    |
    00002     |     2    |                 |         |

谢谢你们......

3 个答案:

答案 0 :(得分:0)

根据我的理解,我认为您需要在表单中添加一个计时器,并且在计时器事件中自动检查数据库中gridview中现有数据的任何更新...

答案 1 :(得分:0)

让我们假设在某种情况下,您将获得扫描的序列号。因此,只要找到序列号,就可以遍历DataGrid,并检查网格视图中的第一列是否与扫描的列相同,如果是,则更新当前记录。

那么你真正陷入了哪个部分?循环记录?

答案 2 :(得分:0)

你的LINQ查询有点偏,要获得你应该做的匹配行:

string scannedNumber = txtserial.text;
var matchedRows = this.gdview1.Rows
    .Cast<DataGridViewRow>()
    .Where(r => scannedNumber.Equals(r.Cells[0].Value));

然后更新“已发布数量”(索引= 2的单元格),只需执行以下操作:

foreach (var row in matchedRows)
{
    row.Cells[2].Value = 1;
}

除非您想增加该数字,否则请使用Int32.Parse / .TryParse