запись данных для каждой строки в пользовательском элементе управления gridview и добавление строки вставки внизу с помощью IEnumerable - PullRequest
0 голосов
/ 02 января 2012

У меня проблема с записью данных в моем операторе if, где if (numRows> 0) предполагает создание строки вставки в нижней части сетки. Он выводит строку вставки с текстовыми полями, но не отображает мои данные, поэтому мне, вероятно, нужно перебрать источник данных и добавить данные в соответствующие ячейки, которые я не знаю, как. так что, если кто-то знает, что нужно сделать, и может помочь, то будет полезен пример кода. спасибо

public class CustomGridView : GridView
{
    protected GridViewRow _footerRow2;
    protected GridViewRow _headerRow2;

    protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
    {
        // Call base method and get number of rows
        int numRows = base.CreateChildControls(dataSource, dataBinding);

        if (numRows == 0)
        {
            //no data rows created, create empty table
            //create table
            Table table = new Table();
            table.ID = this.ID;

            //convert the exisiting columns into an array and initialize
            DataControlField[] fields = new DataControlField[this.Columns.Count];
            this.Columns.CopyTo(fields, 0);

            if (this.ShowHeader)
            {
                //create a new header row
                _headerRow2 = base.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);

                this.InitializeRow(_headerRow2, fields);
                _headerRow2.EnableTheming = true;
                table.Rows.Add(_headerRow2);
            }

            GridViewRow row = base.CreateRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert);
            this.InitializeRow(row, fields);
            row.EnableTheming = true;

           if (this.ShowFooter)
            {
                //create footer row
                _footerRow2 = base.CreateRow(-1, -1, DataControlRowType.Footer, DataControlRowState.Normal);

                this.InitializeRow(_footerRow2, fields);
                _footerRow2.EnableTheming = true;
                table.Rows.Add(_footerRow2);
            }

            this.Controls.Clear();
            this.Controls.Add(table);
        }
        else if (numRows > 0)
        {
            // problem is in here how do i write out a collection
            // of IEnumerable when I don't know what the collection type is

            DataControlField[] fields = new DataControlField[this.Columns.Count];
            this.Columns.CopyTo(fields, 0);

            Table table = new Table();
            table.ID = this.ID;

            GridViewRow insertRow = base.CreateRow(numRows + 1, numRows + 1, DataControlRowType.DataRow, DataControlRowState.Insert);
            this.InitializeRow(insertRow, fields);
            insertRow.Cells[0].Controls.Add(new Button { Text = "Insert", CommandName = "Insert", ID = "Insert" });
            table.Rows.Add(insertRow);

            this.Controls.Clear();
            this.Controls.Add(table);
        }

        return numRows;
    }
}

Ответы [ 2 ]

1 голос
/ 02 января 2012

Короткий ответ: вам, вероятно, нужно использовать отражение, чтобы определить тип IEnumerable. Начните с dataSource.GetType().

0 голосов
/ 02 января 2012

Посмотрите этот пример кода, как вставить новую строку в asp.net GridView:
http://amitpatriwala.wordpress.com/2008/04/18/inserting-new-row-in-gridview-in-aspnet-20/

Редактировать

Если вы по какой-либо причине не хотите использовать нижний колонтитул, см. Пример кода здесь:
http://forums.asp.net/t/1496213.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...