C#未将DataRow添加到DataTable

C#未将DataRow添加到DataTable,c#,datatable,datarow,C#,Datatable,Datarow,我创建了一个DataTable,当我尝试向其中添加一行时,它不会占用任何时间。我知道DataRow中有信息,但在foreach循环完成后,我查看DataTable的计数,它显示为0。这是我正在使用的代码: DataSet CustomColumnsDS = new DataSet(); DataTable dt = new DataTable(); string strXML = GetCatalog(WebUserID, Password); //Web Service Call XmlDoc

我创建了一个DataTable,当我尝试向其中添加一行时,它不会占用任何时间。我知道DataRow中有信息,但在foreach循环完成后,我查看DataTable的计数,它显示为0。这是我正在使用的代码:

DataSet CustomColumnsDS = new DataSet();
DataTable dt = new DataTable();
string strXML = GetCatalog(WebUserID, Password); //Web Service Call
XmlDocument doc = new XmlDocument();doc.LoadXml(strXML);
XmlNodeList xnList = doc.SelectNodes("xml/Catalog/item/Package");

if (xnList.Count > 0)//Count = 90
{
dt.Columns.Add("testId", typeof(string));
dt.Columns.Add("testName", typeof(string));

foreach (XmlNode xn in xnList) 
{
    if (!string.IsNullOrEmpty(xn["Id"].InnerText))
    {
        DataRow dr = dt.NewRow();
        dr["testId"] = xn["Id"].InnerText;
        dr["testName"] = xn["Name"].InnerText;
        try
        {
            //At this point the DataRow is filled in with values, but it does not seem to actually add in.
            dt.Rows.Add(dr); //No Exception is caught
        }
        catch (Exception ex)
        {
            string test = "";
        }
    }
}
CustomColumnsDS.Tables.Add(dt);//Count = 0;
}

感谢您的帮助。谢谢

您应该尝试不指定列的类型,因为我们不知道xml元素的类型,请尝试: dt.列。添加(“testId”); 添加(“测试名称”); 直到你尝试卡茨。。。您确定为每个datarow获得了正确的数据吗?(运行debug直到此行以查看值:
dr[“testName”]=xn[“Name”].InnerText;

我使用以下示例xml(代替web服务调用)运行了您的代码:


并且输出是
4
,这是正确的。在调试器中查看
DataTable
行也会发现数据在那里。

是dt.rows.Add(dr);抛出和异常,然后捕获并吞没它们?您可以尝试使用InsertAt(带有计数器变量)dt.rows.InsertAt(dr,rowCounter);忘了在其中添加注释,未捕获任何异常。这是我调试时使用的。如果在添加之后计算DataTable中的行:dt.rows.add(dr);您从DataTable中查看的是什么计数字段?我在foreach循环的末尾抛出了一个中断,因此它只运行一次,但仍然没有向计数中添加任何内容。我还运行了调试,并查看结果是否与原始代码一致。您应该在此行中放置断点时查看结果:CustomColumnsDS.Tables.Add(dt);然后单击“快速观察”:此值中的结果为:CustomColumnds.Tables.List.Rows。[0].Rows.Count。此值是您的计数。
string strXML =
@"
    <xml>
        <Catalog>
            <item>
                <Package>
                    <Id>1</Id>
                    <Name>a</Name>
                </Package>
                <Package>
                    <Id>2</Id>
                    <Name>b</Name>
                </Package>
            </item>
            <item>
                <Package>
                    <Id>3</Id>
                    <Name>c</Name>
                </Package>
                <Package>
                    <Id>4</Id>
                    <Name>d</Name>
                </Package>        
            </item>
        </Catalog>
    </xml>                
    ";
Console.WriteLine(CustomColumnsDS.Tables[0].Rows.Count);