【问题标题】:C# DataRow not Being Added to DataTableC# DataRow 未添加到 DataTable
【发布时间】:2017-01-30 04:48:09
【问题描述】:

我创建了一个 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;
}

感谢任何帮助。谢谢!

【问题讨论】:

  • dt.Rows.Add(dr); 抛出和异常,然后被捕获和吞下?
  • 您可以尝试使用 InsertAt(带有计数器变量)dt.Rows.InsertAt(dr, rowCounter);
  • 忘记在这里发表评论,没有发现异常。那是我调试的时候用的。
  • 如果在添加后计算 DataTable 中的行数:dt.Rows.Add(dr);
  • 您从 DataTable 中查看的计数字段是什么?

标签: c# datatable datarow


【解决方案1】:

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

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);

输出是4,这是正确的。在调试器中查看DataTable 行也显示数据在那里。

【讨论】:

    【解决方案2】:

    您应该尝试不指定列类型,因为我们不知道 xml 元素的类型,只需尝试: dt.Columns.Add("testId"); dt.Columns.Add("testName"); 直到尝试 cacth... 你确定你得到每个数据行的正确数据吗? (运行调试直到此行以查看值: dr["testName"] = xn["Name"].InnerText;

    【讨论】:

    • 我在 foreach 循环的末尾抛出了一个中断,所以它只运行一次,但仍然没有添加任何内容。
    • 我也运行了调试,看看你的原始代码结果是正确的。当您将断点放在这一行时,您应该查看结果:CustomColumnsDS.Tables.Add(dt);并单击“快速观察”:您在此值中的结果:CustomColumDS.Tables.List.Rows.[0].Rows.Count。这个值是你的计数。
    猜你喜欢
    • 2012-05-03
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2012-11-25
    • 2020-09-02
    • 2015-09-16
    相关资源
    最近更新 更多