Как построить кнопку внутри ячеек GridView в каждой строке? - PullRequest
0 голосов
/ 26 марта 2019

Я использую таблицу 12 на 31 день, используя GridView.Где я могу выбрать на ячейке одним нажатием кнопки.Я уже реализовал это как-то что-то не так с GridView, он не отображал последнюю строку, которая является строкой декабря.Я также использовал жестко закодированный тег html в ячейке для рендеринга кнопки.Но это также хорошо, если динамически генерируется контролем?А также, если строка должна соответствовать дням месяца, например: в феврале будет отображаться 28 кнопок.

Нажмите здесь, чтобы загрузить текущие данные в GridView.

protected void ButtonFilter_Click(object sender, EventArgs e)
        {
                               DataTable dataTable = new DataTable();

                    dataTable.Columns.AddRange(new DataColumn[32]
                    {
                        new DataColumn("Month"),
                        new DataColumn("Day1"),
                        new DataColumn("Day2"),
                        new DataColumn("Day3"),
                        new DataColumn("Day4"),
                        new DataColumn("Day5"),
                        new DataColumn("Day6"),
                        new DataColumn("Day7"),
                        new DataColumn("Day8"),
                        new DataColumn("Day9"),
                        new DataColumn("Day10"),
                        new DataColumn("Day11"),
                        new DataColumn("Day12"),
                        new DataColumn("Day13"),
                        new DataColumn("Day14"),
                        new DataColumn("Day15"),
                        new DataColumn("Day16"),
                        new DataColumn("Day17"),
                        new DataColumn("Day18"),
                        new DataColumn("Day19"),
                        new DataColumn("Day20"),
                        new DataColumn("Day21"),
                        new DataColumn("Day22"),
                        new DataColumn("Day23"),
                        new DataColumn("Day24"),
                        new DataColumn("Day25"),
                        new DataColumn("Day26"),
                        new DataColumn("Day27"),
                        new DataColumn("Day28"),
                        new DataColumn("Day29"),
                        new DataColumn("Day30"),
                        new DataColumn("Day31")
                    });

                    DataRow dataRow;

                    var months = new string[] { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" };

                    var button = new Button
                    {
                        ID = "ButtonCell",
                        Text = ""
                    };

                    for (int i = 0; i < comparePrices.Count; i++)
                    {
                        dataRow = dataTable.NewRow();

                        dataRow["Month"] = months[i];

                        for (int j = 0; j < comparePrices[i].Pricings.Count; j++)
                        {
                            // Load the here.
                            //dataRow[string.Format("Day{0}", j + 1)] = comparePrices[i].Pricings[j].Price;                            
                        }

                        dataTable.Rows.Add(dataRow);
                    }

                    ListOfComparePrice = comparePrices;

                    GridViewPricing.DataSource = dataTable;
                    GridViewPricing.DataBind();
                }

Вот RowDataBoundкод концаGridViewPricing.Rows.Count имеет 12. Количество столбцов 32.

protected void GridViewPricing_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                foreach (GridViewRow row in GridViewPricing.Rows)
                {
                    for (int i = 0; i < GridViewPricing.Columns.Count; i++)
                    {
                        if (i != 0)
                        {
                            row.Cells[i].Text = string.Format("<div><input type='button' style='border: 0; display:block; padding:4px; width:100%; height:100%;' id={0}/></div>", "hi");
                        }
                    }
                }
            }
        }

Также вместо жестко закодированного HTML.Я хотел бы использовать динамический код в серверной части для генерации кнопки.

 var button = new Button
                    {
                        ID = "ButtonCell",
                        Text = ""
                    };

Вывод:

введите описание изображения здесь

1 Ответ

0 голосов
/ 26 марта 2019

Проблема в том, что у вас есть вложенный цикл. Внутри GridViewPricing_RowDataBound есть следующая строка

foreach (GridViewRow row in GridViewPricing.Rows)

Но событие RowDataBound уже запускается для каждой строки, поэтому каждый раз, когда вы повторяете предыдущие строки снова. Но текущая строка добавляется в GridView только после события RowDataBound. Вот почему вы пропустите последний ряд. Должно быть

protected void GridViewPricing_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        for (int i = 0; i < GridViewPricing.Columns.Count; i++)
        {
            if (i != 0)
            {
                row.Cells[i].Text = string.Format("<div><input type='button' style='border: 0; display:block; padding:4px; width:100%; height:100%;' id={0}/></div>", "hi");
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...