Значения привязки шкалы в элементах управления C # сетки - PullRequest
0 голосов
/ 14 декабря 2009

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

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

Теперь я что-то здесь упускаю или эти элементы управления просто не работают с коллекциями типов значений?

Извиняюсь за длинный вопрос!

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
} 

1 Ответ

0 голосов
/ 14 декабря 2009

вы уже знаете, как добавить метку в 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();
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...