Элемент управления GridView с двумя столбцами asp: Command, использующими одну и ту же команду - PullRequest
3 голосов
/ 03 июня 2009

У меня есть элемент управления ASP.NET GridView с двумя столбцами asp:CommandField, которые используют команду Select для выполнения различных задач. Как определить, какой столбец был выбран в событии OnRowCommand, когда оба возвращают «Выбрать», когда я проверяю свойство CommandName объекта GridViewCommandEventArgs?

Вот мой исходный код:

Страница ASPX:

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns="false" OnRowCommand="MyGridView_OnRowCommand">
    <Columns>
        <asp:CommandField ButtonType="Link" ShowSelectButton="true" SelectText="Click Me!" />
        <asp:CommandField ButtonType="Link" ShowSelectButton="true" SelectText="No Click Me!" />
    </Columns>
</asp:GridView>

Код:

protected void MyGridView_OnRowCommand(object sender, GridViewCommandEventArgs e)
{
    string x = e.CommandName //returns "Select" for both asp:CommandField columns
}   

Ответы [ 5 ]

4 голосов
/ 03 июня 2009

Вместо этого используйте столбец кнопки, чтобы вы могли указать конкретные имена команд и работать с ними оттуда

<asp:ButtonField ButtonType="Link" Text="Click Me" CommandName="MyCommand1" />
<asp:ButtonField ButtonType="Link" Text="No Click Me" CommandName="MyCommand2" />

Затем вы можете принять меры на основе e.CommandName

0 голосов
/ 05 декабря 2013

Ответ, который вы ищете, прост и сложен. У меня тоже была эта проблема в моем проекте веб-сайта, поэтому я несколько дней работал в Интернете и не нашел того, что мне и вам было нужно.

Однажды я просто подумал об этой проблеме в одиночку и провел эксперименты в течение нескольких часов и, наконец, понял, что единственный простой способ узнать столбец, по которому была нажата кнопка, - это RowCommand event из GridView в CommandName property из GridViewCommandEventArgs. Возможно, более правильно и удобно редактировать столбцы GridView в режиме конструктора и заменять поля команд на поля кнопок.

Вы можете указать любое string/text, которое вы хотите, каждому полю кнопки в его CommandName, поэтому в событии RowCommand вы можете узнать, на какую кнопку нажали. Button1 или Button2, но вы не хотите давать эти строки, потому что вы запрашиваете что-то, что кнопки должны выбрать и дать вам, поэтому CommandName должно быть словом select , но это также может быть SELECT и Select и selecT и т. д.

Команда выбора может быть упомянута в CommandName во многих формах, и все же система распознает ее. Так, например, если у вас есть два поля Button в GridView, первый из которых CommandName - это просто select , а другой - SELECT , затем, когда любой из них нажимается событие RowCommand и

if (e.CommandName == "select")
  { 
   Label1.Text = "You clicked first button";
  }
  else 
  {
   Label1.Text = "You clicked second button";
  }

и SelectedDataKey вашего GridView будут содержать запрошенные вами данные. То, что другие люди предложили в своем ответе отличить от CommandName, установив кнопку 1 на select_one и кнопку 2 на select_two, поможет вам узнать, была ли нажата select_one или другая, но SelectedDataKey ваш GridView останется null или DataKey экземпляром, который вообще не содержит нужной вам информации.

Другими словами, кнопки не будут выбирать любую необходимую информацию, поэтому очень важно следовать моему ответу. Это точное, идеальное и отличное решение вашей проблемы!

0 голосов
/ 03 июня 2009

использовать свойство аргумента команды.

e.commandargument

Или вы можете динамически создать кнопку в поле команды и установить для commandName все, что вам нужно.

в gridview_Load

for (int i = 0; i <= GridView1.Rows.Count - 1; i++) {

    linkbutton btnedit = new linkbutton();


    GridView1.Rows(i).Cells(3).Controls.Add(btnedit);
   //the above is where you want the button to be on the grid
    btndel.CommandName = "Select2";
    btndel.CommandArgument = "whatever you want";
}

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
    If e.CommandName = "Select1" Then 

       //do stuff
End Sub
0 голосов
/ 03 июня 2009

Ну, во-первых, вам нужно использовать SELECt в качестве команды? Вы можете установить это на что-то еще, что имеет больше смысла.

Во-вторых, вы можете установить для свойства CommandArgument разные значения, чтобы вы знали, какое из них нажимается.

0 голосов
/ 03 июня 2009

Используйте свойство GridViewCommandEventArgs .CommandArgument!

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