C# DataTable.Select()-不返回所有数据行
我有一个保存在viewstate中的Parts datatable,它绑定到ASP.net gridview。零件表中的一列是零件Id。当用户选择编辑零件字段时,我使用DataTable.Select()查找他们正在编辑的当前零件,代码如下:C# DataTable.Select()-不返回所有数据行,c#,datatable,C#,Datatable,我有一个保存在viewstate中的Parts datatable,它绑定到ASP.net gridview。零件表中的一列是零件Id。当用户选择编辑零件字段时,我使用DataTable.Select()查找他们正在编辑的当前零件,代码如下: DataRow row = _Parts.Select(string.Format("[Part Id] = {0}", partId))[0]; 其中,partid始终是一个整数(是的,我知道,这个语句写得不好) 因此,当用户添加零件时,零件Id从0开
DataRow row = _Parts.Select(string.Format("[Part Id] = {0}", partId))[0];
其中,partid始终是一个整数(是的,我知道,这个语句写得不好)
因此,当用户添加零件时,零件Id从0开始并递增。在一个案例中,用户添加了13个部件。当我运行前面提到的代码行时,会抛出一个异常,因为返回的数组没有任何元素(特别是它没有id=12的部分)
因此,我对\u Parts
中的所有行进行了循环,发现共有13个部分,包括一个部分Id为12的行(最后一个)。但是,Select没有找到它。事实上,它只找到第1-10部分(或索引0-9),这就是我被卡住的地方。零件存在于\u Parts
对象中,但select找不到它。我唯一能想到的是它是一个两位数的整数,但它应该以同样的方式工作,不是吗?为什么它只能找到指数0-9
编辑:由于用户询问我如何添加零件,这里是:
DataRow dr = _Parts.NewRow();
dr["Part No"] = txtPartNo.Text;
dr["Qty"] = txtQty.Text;
dr["Description"] = txtDescription.Text;
dr["Vendor"] = txtVendor.Text;
dr["Vendor Part"] = txtVendorPart.Text;
dr["Cost"] = (cost.ToString("C2") == "$0.00") ? "" : cost.ToString("C2");
dr["PO Number"] = txtPONumber.Text;
dr["Delivery Date"] = txtDeliveryDate.Text;
dr["Part Notes"] = txtPartNotes.Text;
dr["Total Cost"] = (total.ToString("C2") == "$0.00") ? "" : total.ToString("C2");
if (_Parts.Rows.Count == 0)
{
// Initialize ID at 0.
dr["Part Id"] = 0;
}
else
{
// ID is count of rows.
dr["Part Id"] = _Parts.Rows.Count;
}
_Parts.Rows.Add(dr);
_Parts.AcceptChanges();
gvParts.DataSource = _Parts;
gvParts.DataBind();
要进行诊断,我将尝试DataRow=_Parts。选择(“[Part Id]=”+partId)[0];如何将新行添加到此_Parts数据表中?添加或编辑数据后,是否调用表上的AcceptChanges()方法?如果您已经这样做了,请发布编辑和添加新行的代码。您的视图一次只显示10行吗?听起来它只是在过滤当前页面,而不是整个数据集。另一方面,您的
if
语句是多余的,因为它与其他语句做的事情相同。@uowzd01没有运气。