![](/img/trans.png)
[英]C# Same DataSource + Multiple DataGridViews = Data Binding Issues?
[英]How can I use the same DataSource for multiple DataGridViews with a different filter applied on each?
我是C#和.NET的初學者,遇到以下問題(使用.NET 4.5):
我有三個DataGridViews,它們應該顯示xml文件中的數據。 每個DataGrid應該過濾其結果,因此它們的xml條目分布在三個DataGridViews中。
我嘗試了以下方法:
DataSet dataSet1 = new DataSet();
dataSet1.ReadXml('some-existing-file.xml');
DataTableCollection tables = dataSet1.Tables;
DataView view1 = new DataView(tables[0]);
BindingSource source1 = new BindingSource();
source1.DataSource = view1;
source1.Filter = "color = 'red'";
gridView1.DataSource = source1;
BindingSource source2 = new BindingSource();
source2.DataSource = view1;
source2.Filter = "color = 'white'";
gridView2.DataSource = source2;
BindingSource source3 = new BindingSource();
source3.DataSource = view1;
source3.Filter = "color = 'blue'";
gridView3.DataSource = source3;
但這不起作用。 所有三個GridView使用最后一個過濾器(“藍色”)。
XML看起來像這樣(簡化):
<?xml version="1.0" encoding="utf-8"?>
<collection>
<entry>
<color>blue</color>
<headline>Some headline</headline>
</entry>
[...]
</collection>
當我想將更改寫回到xml文件時,只是過濾正確的數據集是正確的方法嗎?
以三個視圖為例,因為我認為所有三個過濾器都應用於視圖,您將獲得顯示最后一個過濾器結果的輸出。 如果可行,您以后可以對其進行改進
DataView view1 = new DataView(tables[0]);
DataView view2 = new DataView(tables[0]);
DataView view3 = new DataView(tables[0]);
BindingSource source1 = new BindingSource();
source1.DataSource = view1;
source1.Filter = "color = 'red'";
gridView1.DataSource = source1;
BindingSource source2 = new BindingSource();
source2.DataSource = view2;
source2.Filter = "color = 'white'";
gridView2.DataSource = source2;
BindingSource source3 = new BindingSource();
source3.DataSource = view3;
source3.Filter = "color = 'blue'";
gridView3.DataSource = source3;
DataView可能有一個公開可讀的集合,該集合會被過濾器修改。 設置數據源時,以這種方式提供view1將提供DataView的引用,而不是副本。 這意味着所有過濾器都在同一DataView實例中修改相同的可見集合(這將解釋為什么最后一個過濾器是起作用的過濾器)。
我建議為每個過濾案例創建單獨的DataView實例/副本。 但是,這仍然在您的范圍內,因為它們仍將引用從xml文件加載的相同數據。
DataView view1 = new DataView(tables[0]);
應該進行如下更改以為每個gridview准備新的DataView obj。
DataView view1 = new DataView(tables[0].Copy());
DataView view2 = new DataView(tables[0].Copy());
DataView view3 = new DataView(tables[0].Copy());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.