Изменение стиля кнопки в представлении сетки по щелчку

#c# #asp.net #gridview #buttonfield

#c# #asp.net #представление сетки #поле кнопки

Вопрос:

я использую представление сетки, заполненное 7 полями и 2 граничными полями в каждой строке. Я пытаюсь изменить задний цвет моего поля кнопок при каждом нажатии и выполнить некоторое обновление базы данных с помощью sp. Я пытался получить это в rowcommand, но у меня была нулевая ссылка для объекта button. Я также пытался найти некоторые ссылки на эту тему, но только что нашел элементы в templatefields с кнопками внутри, и я хотел бы использовать buttonfield, а не шаблонный.

Вот пример строки моего представления сетки :

 
<asp:ButtonField DataTextField="datechg_1" HeaderText="Date chg 1" Text="Btn1" ButtonType="Button" CommandName="chgColor"></asp:ButtonField>
<asp:ButtonField DataTextField="datechg_2" HeaderText="Date chg 2" Text="Btn2" ButtonType="Button" CommandName="chgColor"></asp:ButtonField>
<asp:ButtonField DataTextField="datechg_3" HeaderText="Date chg 3" Text="Btn3" ButtonType="Button" CommandName="chgColor"></asp:ButtonField>
  

и вот код rowcommand, выдающий нулевую ссылку :

  protected void grid_date_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName=="chgColor")
            {
                Button btn = e.CommandSource as Button; << null reference here -_-                
                var color = btn.Style.Value;
                switch (color)
                {
                    case "background-color:red;":
                        btn.Style["background-color"] = "rgb(0,200,83)";
                        break;
                    case "background-color:blue;":
                        btn.Style["background-color"] = "rgb(242,101,34)";
                        break;
                    case "background-color:green;":
                        btn.Style["background-color"] = "rgb(229,57,53)";
                        break;
                }
            }
        }
  

Я думаю, что цвет переключателя совсем не хорош, но на данный момент это не проблема. Я хотел бы знать, как нажать кнопку.
Спасибо за вашу помощь 🙂

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

1. вместо использования asp:ButtonField вы можете использовать asp: TemplateField из gridview и создать ItemTemplate, затем создать asp: Button внутри этого и указать в нем CommandName

Ответ №1:

Добавьте событие OnRowCommand в Gridview.

  <asp:GridView OnRowCommand="GridView1_RowCommand">
        <Columns>
            <asp:ButtonField />
        </Columns>
  </asp:GridView>
  

и класс

  protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
 {
      //Response.Write(e.CommandArgument);        
 }
  

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

1. у меня уже есть RowCommand для моего gridview protected void grid_date_RowCommand(object sender, GridViewCommandEventArgs e)

2. вы также должны указать это в своем поле кнопок.