Кнопки в контроле сетки - PullRequest
       36

Кнопки в контроле сетки

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

У меня есть элемент управления gridview, который отображает данные, возвращенные из БД. Свойство datakey для gridview привязано к столбцу ID в DB

Каждая запись в GV имела 2 кнопки и один флажок. При щелчке по любому из этих элементов управления я хочу получить строку, по которой был выполнен щелчок, и выполнить действие в зависимости от того, по какому элементу управления был нажат.

Я надеялся, что смогу использовать событие row_command, чтобы зафиксировать, какой элемент управления был нажат, но это не помогло, если я что-то упустил

Ответы [ 4 ]

0 голосов
/ 25 октября 2014
<asp:GridView ID="gvProduct" runat="server" AutoGenerateColumns="False" DataKeyNames="ID"OnRowCommand="gvProduct_RowCommand" >
    <Columns>
       <asp:TemplateField>
           <ItemTemplate>
               <asp:ImageButton ID="btnEdit" runat="server" CommandName="EditCommand" Text="Edit" />
           </ItemTemplate>                                         
       </asp:TemplateField>
       <asp:BoundField DataField="ProjectNo" HeaderText="ProjectNo" />
       <asp:BoundField DataField="Date" HeaderText="Date" />
       <asp:BoundField DataField="Shift" HeaderText="شیفت" />
    </Columns>         
</asp:GridView>

и этот код:

protected void gvProduct_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "EditCommand")
    {
        GridViewRow Row = (GridViewRow)((Control)e.CommandSource).NamingContainer;
        int productID = Convert.ToInt32(gvProduct.DataKeys[Row.RowIndex].Value);

        EditFunction(productID);
    }
}

EditFunction - это функция, которая устанавливает ваши коды для выбранной строки, и я удалил ее здесь.

Вам нужно что-то подобное?

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

Также проблема может заключаться в неправильной последовательности событий жизненного цикла. Вы должны привязать данные к вашей сетке, как только сможете. Попробуйте перенести привязку данных на Page_Init событие

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

Код сзади:

protected void gvCustomers_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.Equals("RowSelected"))
    {
        GridViewRow row = (((e.CommandSource) as Button).NamingContainer) as GridViewRow;
        Label label = row.FindControl("lblFirstName") as Label;

        Response.Write(label.Text);
    }
}

А вот ASPX View:

<asp:GridView AutoGenerateColumns="false" ID="gvCustomers" runat="server" OnRowCommand="gvCustomers_RowCommand" >

    <Columns>

        <asp:TemplateField>
            <ItemTemplate>

                <asp:Label ID="lblFirstName" runat="server" Text ='<%# Eval("FirstName") %>' />

           </ItemTemplate>
       </asp:TemplateField>

       <asp:TemplateField>
           <ItemTemplate>
               <asp:Button Text="Select" ID="btn1" runat="server" CommandArgument ='<%# Eval("FirstName") %>' CommandName="RowSelected" />
           </ItemTemplate>
       </asp:TemplateField>

    </Columns>

</asp:GridView>
0 голосов
/ 04 декабря 2008

Вы назначили кнопки 'CommandName и CommandArgument?

...