2009-12-14 19 views
0

最近,我一直在使用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 
} 

回答

0

您已經知道如何將標籤添加到GridView。

這是一個邏輯自動編號,即行號添加到電網

未經測試的代碼

protected void gv_DataBound(object sender, EventArgs e) 
     { 
      int pageIndex = gv.PageIndex; 
      int pagesize = 20; 
      int count = pagesize * pageIndex; 
      foreach (GridViewRow row in gv.Rows) 
      { 
       if (row.RowType == DataControlRowType.DataRow) 
       { 
        count ++; 
        Label lbl = row.FindControl("lblAutoNumber") as Label; 
        lbl.Text = count.ToString(); 
       } 
      } 
     } 
+0

嗯......我原來的解決方案似乎更優雅和可重複使用的,不要太熱衷於字符串控制ID在那裏。謝謝你的回答! – James 2009-12-14 13:18:00