GridView.SelectedIndex funktioniert nicht



  • Hallo

    ich habe folgendes Problem:

    Ich habe ein GridView und eine Spalte mit ButtonFields. Diese Spalte habe ich mit dem Event GridView_SelctedIndexChanged verknüpft. Das Event wird beim Klicken auf einen der Buttons auch ausgelöst. Allerdings wird bei der Abfrage GridView.SelectedIndex immer -1 angezeigt, egal welche Zeile ich in meinem GridView anklicke. Woran kann das liegen? Warum verändert sich der Index nicht anhand der angeklickten Zeile? Hier mein Code:

    <asp:GridView ID="GridViewMeans" runat="server" AutoGenerateColumns="False" 
                       EmptyDataText="leer" Width="980px" BackColor="White" 
                       BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
                           Font-Size="X-Small" ToolTip="Dies ist ein ToolTip Test"  
                           Caption="PIMS important means list" 
                           CaptionAlign="Top" Height="350px" 
                           onselectedindexchanged="GridViewMeans_SelectedIndexChanged" 
                           AllowPaging="True" DataKeyNames="MeanReference">
    
                       <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
                       <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Center" 
                           VerticalAlign="Middle" Width="30px" />
                       <EmptyDataRowStyle BackColor="White" BorderColor="Black" BorderStyle="Solid" 
                           Height="30px" Width="100px" />
                        <columns>
                        <asp:ButtonField DataTextField="MeanReference" ButtonType="Link" CommandName="GridViewMeans_SelectedIndexChanged" 
                                ItemStyle-Width="100" HeaderText="Mean Reference">
                            <ItemStyle Width="100px" />
                            </asp:ButtonField></asp:GridView>
    
    protected void GridViewMeans_SelectedIndexChanged(object sender, EventArgs e)
            {
    
                if (GridViewMeans.SelectedIndex > -1)
                {
                    string szSelectedMean = GridViewMeans.Rows[GridViewMeans.SelectedIndex].Cells[0].Text;
    
                }
            }
    

    Fehlt mir irgendwo noch eine Verknüpfung oder sowas?



  • O.k., ich habe gesehen ich habe ein ganz anderes Problem. Das Event wird gar nicht ausgelöst, daher kann er den Index auch nicht richtig anzeigen. Bisher hat er das Event nur ausgelöst, weil es mit der View, in dem das GridView liegt, verknüpft war. Wenn ich das Event allerdings nur an das GridView binde, wird es nicht ausgelöst. Woran liegt das?



  • handler?



  • Das Problem ist gelöst. Es funktioniert über das RowCommandEvent. Hier die Lösung:

    protected void GridViewMeans_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                //if event was fired from button with CommandName "Select" then...
                if (e.CommandName == "Select")
                {
                    //Get row index
                    int index = Convert.ToInt32(e.CommandArgument);
                    //Get value from ButtonField in column 0
                    string szName2 = ((LinkButton)GridViewMeans.Rows[index].Cells[0].Controls[0]).Text;
                }
            }
    

Anmelden zum Antworten