DataTable.Select() - 不返回所有DataRows

时间:2015-05-26 21:40:58

标签: c# datatable

我在视图状态中保存了一个部件数据表,我绑定到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();

0 个答案:

没有答案