C#未将DataRow添加到DataTable
我创建了一个DataTable,当我尝试向其中添加一行时,它不会占用任何时间。我知道DataRow中有信息,但在foreach循环完成后,我查看DataTable的计数,它显示为0。这是我正在使用的代码: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
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);