Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataTable.Select()-不返回所有数据行_C#_Datatable - Fatal编程技术网

C# 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开

我有一个保存在viewstate中的Parts datatable,它绑定到ASP.net gridview。零件表中的一列是零件Id。当用户选择编辑零件字段时,我使用DataTable.Select()查找他们正在编辑的当前零件,代码如下:

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没有运气。