Получить текущую строку из Gridview в ASP.NET

У меня Gridview с кнопками удаления и редактирования выглядит так:

<asp:GridView ID="grdTrackedItems" runat="server" AutoGenerateColumns="False" Width="330px"
            BorderStyle="None" OnRowDataBound="OnRowDataBoundTrackedItems" OnRowDeleting="OnRowDeletingTrackedItems">
            <Columns>
              <asp:TemplateField HeaderText="Name">
                <ItemTemplate>
                  <asp:Label ID="lblItem" runat="server" Text='<%# Eval("Item") %>' />
                </ItemTemplate>
              </asp:TemplateField>
              <asp:TemplateField>
                <ItemTemplate>
                  <asp:ImageButton ID="imgDelete" runat="server" ImageUrl="~/Resources/Images/Delete.png"
                    Height="12" Width="12" ToolTip="Delete" CommandName="Delete" />
                </ItemTemplate>
                <ItemStyle Width="22px" />
              </asp:TemplateField>
              <asp:TemplateField>
                <ItemTemplate>
                  <asp:ImageButton ID="imgEdit" runat="server" ImageUrl="~/Resources/Images/Edit.png"
                    Height="12" Width="12" ToolTip="Edit" />
                </ItemTemplate>
                <ItemStyle Width="22px" />
              </asp:TemplateField>
            </Columns>
          </asp:GridView>

У меня есть текстовое поле и кнопка «Сохранить» внизу страницы. Я хочу отображать имя элемента в текстовом поле, когда я нажимаю кнопку редактирования в gridview. Как я могу это сделать?


person Sauron    schedule 12.01.2010    source источник


Ответы (3)


Предоставьте обработчик для события RowEditing, а затем обновите текстовое поле в этом обработчике.

<asp:GridView ID="grdTrackedItems" runat="server" 
             AutoGenerateColumns="False" Width="330px"
            ...
             OnRowEditing="EditRecord">
            <Columns>


protected void EditRecord(object sender, GridViewEditEventArgs e)
{
    Label lbl = (Label)grdTrackedItems.Rows[e.NewEditIndex].Cells[0].FindControl("lblItem");


    MyTextBox.Text = lbl.text;
}
person womp    schedule 12.01.2010
comment
Извините, пример кода был довольно общим. Вам нужно будет изменить ячейку, на которую она ссылается, чтобы быть вашей фактической ячейкой ... похоже, что она находится в вашем первом столбце, а не в 6-м, и вам нужно будет получить значение элемента управления меткой. Я обновлю код. - person womp; 15.01.2010
comment
Я сомневаюсь. Поскольку моя сетка содержит только один элемент, я могу поместить его в DataKeyNames, есть ли проблемы с производительностью? - person Sauron; 15.01.2010

внутри обработчика нажатия кнопки редактирования вы можете получить доступ к текущей строке, как показано ниже:

protected void Button1_Click1(object sender, EventArgs e)
{
    GridViewRow row = ((ImageButton)sender).Parent.Parent as GridViewRow;
    // Do some thing with this row
}
person user240709    schedule 12.01.2010

Я получил решение от river-blue отвечать.

Добавьте DataKeyNames = "Item" в Gridview и внутри обработчика нажатия кнопки редактирования

     protected void OnClickEdit( object sender, EventArgs e )
    {
        GridViewRow row = ( (ImageButton) sender ).Parent.Parent as GridViewRow;
        txtName.Text =  grdTrackedItems.DataKeys[row.RowIndex].Value.ToString();
    }
person Sauron    schedule 12.01.2010