Подтвердить что ты не робот

ASP.NET GridView RowIndex как CommandArgument

Как вы можете получить доступ и отобразить индекс строки элемента gridview в качестве аргумента команды в кнопке столбца кнопки?

<gridview>
<Columns>
   <asp:ButtonField  ButtonType="Button" 
        CommandName="Edit" Text="Edit" Visible="True" 
        CommandArgument=" ? ? ? " />
.....
4b9b3361

Ответ 1

Вот очень простой способ:

<asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" Visible="True" 
                 CommandArgument='<%# Container.DataItemIndex %>' />

Ответ 2

MSDN говорит, что:

Класс ButtonField автоматически заполняет свойство CommandArgument соответствующим значением индекса. Для других командных кнопок вы должны вручную установить свойство CommandArgument командной кнопки. Например, вы можете установить CommandArgument в <% # Container.DataItemIndex% > , когда элемент управления GridView не имеет пейджинга.

Поэтому вам не нужно устанавливать его вручную. Затем команда row с GridViewCommandEventArgs сделает ее доступной; например.

protected void Whatever_RowCommand( object sender, GridViewCommandEventArgs e )
{
    int rowIndex = Convert.ToInt32( e.CommandArgument );
    ...
}

Ответ 3

Вот предложение Microsoft для этого http://msdn.microsoft.com/en-us/library/bb907626.aspx#Y800

В gridview добавьте командную кнопку и преобразуйте ее в шаблон, а затем дайте ей имя команды в этом случае " AddToCart", а также добавьте CommandArgument "<% # ((GridViewRow ) Контейнер).RowIndex% > "

<asp:TemplateField>
  <ItemTemplate>
    <asp:Button ID="AddButton" runat="server" 
      CommandName="AddToCart" 
      CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
      Text="Add to Cart" />
  </ItemTemplate> 
</asp:TemplateField>

Затем для создания в событии RowCommand gridview укажите, когда запускается команда "AddToCart", и делайте то, что вы хотите оттуда

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
  if (e.CommandName == "AddToCart")
  {
    // Retrieve the row index stored in the 
    // CommandArgument property.
    int index = Convert.ToInt32(e.CommandArgument);

    // Retrieve the row that contains the button 
    // from the Rows collection.
    GridViewRow row = GridView1.Rows[index];

    // Add code here to add the item to the shopping cart.
  }
}

** Одна ошибка, которую я делал, заключается в том, что я хотел добавить действия на кнопку шаблона вместо того, чтобы делать это непосредственно на событии RowCommand.

Ответ 4

Я думаю, что это сработает.

<gridview>
<Columns>

            <asp:ButtonField  ButtonType="Button" CommandName="Edit" Text="Edit" Visible="True" CommandArgument="<%# Container.DataItemIndex %>" />
        </Columns>
</gridview>

Ответ 5

void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    Button b = (Button)e.CommandSource;
    b.CommandArgument = ((GridViewRow)sender).RowIndex.ToString();
}

Ответ 6

Я обычно связываю эти данные с помощью события RowDatabound с GridView:

protected void FormatGridView(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
   if (e.Row.RowType == DataControlRowType.DataRow) 
   {
      ((Button)e.Row.Cells(0).FindControl("btnSpecial")).CommandArgument = e.Row.RowIndex.ToString();
   }
}

Ответ 7

<asp:TemplateField HeaderText="" ItemStyle-Width="20%" HeaderStyle-HorizontalAlign="Center">
                    <ItemTemplate>
                        <asp:LinkButton runat="server" ID="lnkAdd" Text="Add" CommandName="Add" CommandArgument='<%# Eval("EmpID"))%>' />
                    </ItemTemplate>
                </asp:TemplateField>

Это традиционный способ и последняя версия инфраструктуры asp.net с строго типизированными данными, и вам не нужно использовать в качестве строки, например, "EMPID"

Ответ 8

<asp:LinkButton ID="LnkBtn" runat="server" Text="Text" RowIndex='<%# Container.DisplayIndex %>' CommandArgument='<%# Eval("??") %>' OnClick="LnkBtn_Click" />

внутри обработчика событий:

Protected Sub LnkBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
  dim rowIndex as integer = sender.Attributes("RowIndex")
  'Here you can use also the command argument for any other value.
End Sub