Почему кнопка внутри ячейки «RowDataBound» не запускает событие click? - PullRequest
1 голос
/ 27 марта 2019

Я реализую вид сетки с кнопкой внутри каждой ячейки.Но я не могу понять, почему кнопки внутри ячейки в виде сетки не работают.Я использовал gridview RowDataBound и RowCommand, чтобы проверить, работают ли кнопки.Я также создаю кнопку вне вида сетки, но она работает как положено.Я не могу понять, почему кнопка в ячейке сетки не срабатывает после нажатия.

Создание сетки в виде кода.

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" };

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

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

    for (int j = 0; j < 30; j++)
    {
    }

    dataTable.Rows.Add(dataRow);
}

GridView.DataSource = dataTable;
GridView.DataBind();

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        LoadDataSources();
    }
}

Визуализация кнопки в ячейке.

protected void GridViewPricing_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        for (int i = 1; i <= 31; i++)
        {
            var button = new Button();
            button.ID = string.Format("{0}", i);
            button.Attributes.Add("style", "display:block; padding:4px; width:100%; height:100%;");

            button.CommandName = "ButtonCell";
            button.CommandArgument = "ButtonCell";

            e.Row.Cells[i].Controls.Add(button);
        }
    }
}

Проверьте, срабатывает ли кнопка после нажатия.

protected void ButtonCell_Click(object sender, EventArgs e)
{
    Response.Write("Button Click");
}

protected void GridViewPricing_RowCommand(object sender, GridViewCommandEventArgs e)
{
    Response.Write("Button Click");
}

Это для просмотра.

<asp:GridView ID="GridView"
runat="server"
AutoGenerateColumns="false"
CellPadding="0"
CellSpacing="0"
OnRowDataBound="GridViewPricing_RowDataBound"
OnRowCommand="GridViewPricing_RowCommand">
<Columns>
    <asp:BoundField DataField="Month" HeaderText="" />
    <asp:BoundField DataField="Day1" HeaderText="1" />
    <asp:BoundField DataField="Day2" HeaderText="2" />
    <asp:BoundField DataField="Day3" HeaderText="3" />
    <asp:BoundField DataField="Day4" HeaderText="4" />
    <asp:BoundField DataField="Day5" HeaderText="5" />
    <asp:BoundField DataField="Day6" HeaderText="6" />
    <asp:BoundField DataField="Day7" HeaderText="7" />
    <asp:BoundField DataField="Day8" HeaderText="8" />
    <asp:BoundField DataField="Day9" HeaderText="9" />
    <asp:BoundField DataField="Day10" HeaderText="10" />
    <asp:BoundField DataField="Day11" HeaderText="11" />
    <asp:BoundField DataField="Day12" HeaderText="12" />
    <asp:BoundField DataField="Day13" HeaderText="13" />
    <asp:BoundField DataField="Day14" HeaderText="14" />
    <asp:BoundField DataField="Day15" HeaderText="15" />
    <asp:BoundField DataField="Day16" HeaderText="16" />
    <asp:BoundField DataField="Day17" HeaderText="17" />
    <asp:BoundField DataField="Day18" HeaderText="18" />
    <asp:BoundField DataField="Day19" HeaderText="19" />
    <asp:BoundField DataField="Day20" HeaderText="20" />
    <asp:BoundField DataField="Day21" HeaderText="21" />
    <asp:BoundField DataField="Day22" HeaderText="22" />
    <asp:BoundField DataField="Day23" HeaderText="23" />
    <asp:BoundField DataField="Day24" HeaderText="24" />
    <asp:BoundField DataField="Day25" HeaderText="25" />
    <asp:BoundField DataField="Day26" HeaderText="26" />
    <asp:BoundField DataField="Day27" HeaderText="27" />
    <asp:BoundField DataField="Day28" HeaderText="28" />
    <asp:BoundField DataField="Day29" HeaderText="29" />
    <asp:BoundField DataField="Day30" HeaderText="30" />
    <asp:BoundField DataField="Day31" HeaderText="31" />
</Columns>
</asp:GridView>

1 Ответ

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

Попробуйте это:

Добавить кнопку перед закрытием тега columns элемента

<asp:BoundField DataField="Day31" HeaderText="31" />
  <asp:ButtonField ButtonType="Button"  CommandName="ButtonCommandName" HeaderText="Buttons" 
     ShowHeader="True" Text="Click Me" ItemStyle-Width="30px" />
</Columns>

В вашем GridView_RowCommand

protected void GridViewPricing_RowCommand(object sender, GridViewCommandEventArgs e)
{
     int index = Convert.ToInt32(e.CommandArgument);
      GridViewRow gvRow = GridViewPricing.Rows[index];
     if (e.CommandName == "ButtonCommandName")
      {
          //Your Code here something like 
           gvRow.Cells[0].Text

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