我從序列化爲XML字符串的示例(示例代碼:*)填充DataGridView。我需要的是(1)將圖像導入DataGridView,(2)設置bindingSource.Filter字符串並根據列中的字符串(可能有數千個條目)動態地過濾表格。我奇怪的XML字符串破解下面的過濾器工作,但我不能de /序列化圖像到/從字符串,所以我不能創建一個神奇的DataView其中.Filter工作正常。 (a)是否有更好的方式從RAM獲取DataView對象集合到dataGridView中,而不是序列化爲XML字符串(以獲得DataView)注意.Filter仍然有效。 (b)有沒有其他的方法可以在運行時添加東西到bindingSource/DataView(特別是Image列),它保留了.Filter的使用?獲取圖像和bindingSource.Filter在DataGridView中一起工作
從我的測試中,this way (How to: Bind Objects to Windows Forms DataGridView Controls)使得設置Filter字段無法操作,即什麼也不做,沒有Exception,沒有魔術過濾,nada。
(*)
// objects in each row
[Serializable]
public class GradorCacheFile
{
public Bitmap image;
public string filename;
// to make it serializable
public GradorCacheFile()
{
}
public GradorCacheFile(GradorCacheFile old)
{
this.filename = old.filename;
this.image = old.image;
}
}
// snippet of class:
public List<GradorCacheFile> files = null;
void Process()
{
GradorCacheFiles gcf = new GradorCacheFiles();
gcf.AddRange(this.files);
XmlSerializer xs = new XmlSerializer(typeof(GradorCacheFiles));
StringWriter sw = new StringWriter();
xs.Serialize(sw, gcf);
sw.Close();
string xml = sw.ToString();
StringReader reader = new StringReader(xml);
DataSet ds = new DataSet();
ds.ReadXml(reader);
if (ds.Tables.Count < 1)
return;
DataTable dt = ds.Tables[0];
DataView dv = new DataView(dt);
this.bindingSource = new BindingSource();
this.bindingSource.DataSource = dv;
this.dataGridView.DataSource = this.bindingSource;
int rows = this.dataGridView.Rows.Count;
if (rows == 0)
return;
this.dataGridView.Columns[0].HeaderText = "Image";
this.dataGridView.Columns[1].HeaderText = "File";
}
工作就像一個魅力,雖然C#2.0中需要手動getter和setter方法,但它可能會更糟,因爲這工作。我將重新構建一箇舊的應用程序來使用它,而不是脆弱的XML /字符串方法...... blech。 – 2009-06-22 23:45:02