Почему кнопка внутри ячейки «RowDataBound» не запускает нажатие события?

#c# #asp.net #gridview

#c# #asp.net #просмотр сетки

Вопрос:

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

Сгенерируйте gridview на code-behind.

 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. Снимите IsPostBack галочку вокруг LoadDataSources(); .

Ответ №1:

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

Добавить кнопку перед закрытием тега 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

      }
}
  

Комментарии:

1. это работает. но я хочу отобразить всю ячейку кнопки, кроме названия месяца, дней столбца.

2. Ваша проблема просто в событии щелчка по кнопке .. если это работает и помогает вашей проблеме, тогда вы можете сделать это в соответствии с ответом.