我在视图状态中保存了一个部件数据表,我绑定到ASP.net gridview。零件表中的一列是零件ID。当用户选择编辑零件字段时,我使用DataTable.Select()使用以下代码查找他们正在编辑的当前零件:
DataRow row = _Parts.Select(string.Format("[Part Id] = {0}", partId))[0];
其中Part Id总是一个整数(是的,我知道,该语句编写得不好)。
因此,当用户添加部件时,部件ID从0开始并递增。在一个案例中,用户添加了13个部分。当我运行前面提到的代码行时,会抛出异常,因为返回的数组没有任何元素(特别是它没有id = 12的部分)。
所以我对_Parts
中的所有行进行了循环,发现有13个部分,包括部分ID为12的行(最后一个)。 Select虽然找不到它。实际上它只找到1-10部分(或索引0-9),这就是我被困住的地方。该部分存在于_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();