ASP.NET GridView RowIndex As CommandArgument - PullRequest
       15

ASP.NET GridView RowIndex As CommandArgument

55 голосов
/ 23 декабря 2008

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

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

Ответы [ 8 ]

96 голосов
/ 29 декабря 2008

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

<asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" Visible="True" 
                 CommandArgument='<%# Container.DataItemIndex %>' />
34 голосов
/ 24 февраля 2010

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

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

Так что вам не нужно устанавливать его вручную. Команда строки с GridViewCommandEventArgs сделает его доступным; например,

protected void Whatever_RowCommand( object sender, GridViewCommandEventArgs e )
{
    int rowIndex = Convert.ToInt32( e.CommandArgument );
    ...
}
12 голосов
/ 17 февраля 2011

Вот предложение 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 вида сетки определите, когда сработала команда «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.

5 голосов
/ 23 декабря 2008

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

<gridview>
<Columns>

            <asp:ButtonField  ButtonType="Button" CommandName="Edit" Text="Edit" Visible="True" CommandArgument="<%# Container.DataItemIndex %>" />
        </Columns>
</gridview>
1 голос
/ 23 декабря 2008
void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    Button b = (Button)e.CommandSource;
    b.CommandArgument = ((GridViewRow)sender).RowIndex.ToString();
}
0 голосов
/ 16 июня 2015
<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
0 голосов
/ 18 января 2012
<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»

0 голосов
/ 23 декабря 2008

Я обычно связываю эти данные, используя событие 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();
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...