来自DataSet.ReadXml的DataGridView.DataSource使用数组

时间:2015-03-25 15:46:00

标签: c# arrays datagridview dataset dataview

我有以下解决方案将xml文件内容加载到DataGridView中,这是正常工作

DataSet dataSet = new DataSet();
dataSet.ReadXml(filePath);
dataGridView1.DataSource = dataSet.Tables[0];
this.dataGridView1.Columns["id"].Visible = false;
this.dataGridView1.Columns["name"].DisplayIndex = 0;
this.dataGridView1.Columns["party"].Width = 35;
...

现在我想只传递某些特定ID的行,这样做也可以正常返回id = 2的行

DataSet dataSet = new DataSet();
dataSet.ReadXml(filePath);
DataView dv;
dv = new DataView(dataSet.Tables[0], "id = 2 ", "id Desc", DataViewRowState.CurrentRows);
dataGridView1.DataSource = dv;

但是,我希望从数组返回id以及以下工作

int[] myArray;
myArray = new int[2] {2,10};

DataSet dataSet = new DataSet();
dataSet.ReadXml(filePath);
DataView dv;
for (int i = 0; i < myArray.Count(); i++)
{
   dv = new DataView(dataSet.Tables[0], "id in (myArray[i]) ", "id Desc", DataViewRowState.CurrentRows);
}
dataGridView1.DataSource = dv;

我收到错误&#34;使用未分配的本地变量&#39; dv&#39; &#34;

出了什么问题?

XML文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Recipies>
 <Recipe id="1" name="test1" party="false">
 <Recipe id="2" name="test2" party="true">
 <Recipe id="3" name="test3" party="false">
 <Recipe id="4" name="test4" party="false">
 <Recipe id="5" name="test5" party="true">
 <Recipe id="6" name="test6" party="false">
 <Recipe id="7" name="test7" party="false">
 <Recipe id="8" name="test8" party="true">
 <Recipe id="9" name="test9" party="false">
 <Recipe id="10" name="test10" party="true">
</Recipies>

2 个答案:

答案 0 :(得分:0)

发生错误是因为您没有将任何值放入myArray。因此myArray.Count()将为-1,因此不会进入for循环。这意味着没有为dv分配任何内容,当您尝试将其与DataSource一起使用时,您会收到错误。

另一方面,我认为使用myArray.Length而不是myArray.Count()的成本稍微低一些。

答案 1 :(得分:0)

发现它!

int[] myArray;
myArray = new int[2] {2,10};

DataSet dataSet = new DataSet();
dataSet.ReadXml(filePath);
DataView dv = null;
string RecipeIDConcatenate = string.Join(",", myArray.Select(x => x.ToString()).ToArray());    
dv = new DataView(dataSet.Tables[0], "id in ( " + RecipeIDConcatenate + ")", "id Desc", DataViewRowState.CurrentRows);
}
dataGridView1.DataSource = dv;