最近,我一直在使用ASP.Net GridView控件和WinForms DataGridView來動態顯示數據。在這兩種情況下,我一直使用各種通用列表作爲數據源(List<T>
)。當此列表以屬性定義的類型集合的形式出現時,這些控件與命名屬性的綁定沒有問題,並且在DataGridView將以屬性值作爲行顯示屬性的情況下。在C#網格控件中綁定sclar值
但是,例如,當我有一個字符串或整數的集合時,這些控件無法綁定到列表中包含的值。我創建我的ASP GridView控件動態,所以它沒有在頁面中定義,直到它需要,所以我不認爲綁定表達式將在這裏工作,雖然我是新來綁定表達式,所以我可能是錯的:
GridView grid = new GridView();
grid.AutoGenerateColumns = false;
grid.CssClass = "summaryTable";
grid.Columns.Add(new TemplateField { HeaderText = "Error No.", ItemTemplate = new DataGridAutoNumber(grid) });
grid.Columns.Add(new BoundField { HeaderText = "Error Description", DataField="Value" });
grid.DataSource = validator.ValidationErrors;
grid.DataBind();
在上面的例子中,validator.ValidationErrors是一個字符串列表。爲了獲得GridView的字符串值,我不得不將它們包裝在I型創建綁定:
public class ValueItem<T>
{
T value;
public ValueItem(T valueIn) { value = valueIn; }
public T Value { get { return value; } }
}
這種類型同時適用於GridView和DataGridView中,讓我創造任何價值類型的List<ValueItem<T>>()
所以我可以將它綁定到網格類型控件。
現在我在這裏丟失了什麼,或者做這些控件只是不適合值類型的集合?
道歉的長問題!
P.S.作爲旁註,如果有人知道如何在代碼中創建一個GridView中的自動編號列而不是腳本,請告訴我。我的解決方案是這樣的:
public class DataGridAutoNumber : ITemplate
{
GridView grid;
public DataGridAutoNumber(GridView gridIn) { grid = gridIn; }
#region ITemplate Members
public void InstantiateIn(Control container)
{
container.Controls.Add(new Label{ Text=(grid.Rows.Count+1).ToString()});
}
#endregion
}
嗯......我原來的解決方案似乎更優雅和可重複使用的,不要太熱衷於字符串控制ID在那裏。謝謝你的回答! – James 2009-12-14 13:18:00