2009-12-14 2 views
0

Недавно я использовал динамический интерфейс ASP.Net GridView и WinForms DataGridView для динамического отображения данных. В обоих случаях я использовал разные обобщенные списки в качестве источника данных (List<T>). Когда этот список используется в виде набора типов с определенными свойствами, эти элементы управления не имеют проблем с привязкой к именованному свойству, а в случае DataGridView будут отображаться свойства как заголовки со значениями для каждого свойства в виде строк.Значения привязки привязки в элементах управления сетью C#

Однако, если у меня есть набор строк или ints, эти элементы управления имеют проблемы с привязкой к значениям, содержащимся в списках. Я создаю свой элемент управления 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 связать строковые значения, которые я имел, чтобы обернуть их в типе я создал:

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. В качестве побочной заметки, если кто-нибудь знает, как создать столбец autonumber в 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

Хмммы ... Мое первоначальное решение кажется более элегантным и многоразовым, не слишком заинтересованы в строке контрольный идентификатор. Спасибо за ваш ответ! – James

Смежные вопросы