none
GridView selectedIndexchanged RRS feed

  • Frage

  • Hallo!

    Ich möchte den selectedIndexchanged Event auslösen jedoch passiert nichts.
    Könnte mir bitte jemand erklären warum onRowDataBound funktioniert und
    das selectedIndexchanged und selectedIndexchanging nicht.

    Danke im voraus und Lg
    String.Rise

    <asp:GridView ID="grdTest" runat="server"
    OnRowDataBound="Test_RowDataBound"
    OnSelectedIndexChanged="grdTest_SelectedIndexChanged"
    OnSelectedIndexChanging="grdTest_SelectedIndexChanging">
    </asp:GridView>
    	protected void grdTest_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (grdTest.SelectedRow != null)
                {
                    
                }
            }
    
            protected void grdTest_SelectedIndexChanging(Object sender, GridViewSelectEventArgs e)
            {
                if (grdTest.SelectedRow != null)
                {
                    
                }
            }

    Montag, 25. Februar 2013 10:05

Antworten

Alle Antworten

  • Hi,

    zeig doch mal bitte die Methode, in der grdTest.DataBind() steht. Ich tippe mal darauf, dass Du das auch bei einem PostBack aufrufst, das wäre in diesem Fall aber kontraproduktiv.

    Falls ich recht habe, könntest Du das bspw. so anpassen:

    grdTest.DataSource = <DeineDatenquelle>;
    if( !Page.IsPostBack ) {
        grdTest.DataBind();
    }
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 25. Februar 2013 10:16
    Moderator
  • Hallo Stefan,

    danke vorerst für deine prompte Antwort.
    Hier mal der Code im CodeBehind

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            TestBinding();
        }            
    }
    private void Test()
    {
        grdTest.DataSource = <DatenQuelle>;
        grdTest.DataBind();
    }
    protected void grdTest_RowDataBound(Object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[0].Visible = false;
        }
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Normal)
        {
            e.Row.Cells[0].Visible = false;
            e.Row.Cells[1].Width = 150;
            e.Row.CssClass = "normal";
        }
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Alternate)
        {
            e.Row.Cells[0].Visible = false;
            e.Row.Cells[1].Width = 150;
            e.Row.CssClass = "alternate";
        }
    }
    
    protected void grdTest_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (grdTest.SelectedRow != null)
        {
            
        }
    }
    
    protected void grdTest_SelectedIndexChanging(Object sender, GridViewSelectEventArgs e)
    {
        if (grdTest.SelectedRow != null)
        {
            
        }
    }

    Ich möchte das ohne CommandFiled (asuwahl-Button) realisieren. So das wenn ich auf eine Zeile klicke das dann der Event ausgelöst wird. Habe es gerade mit einem CommandFiled probiert und da hat es funktioniert aber nicht ohne CommandFiled.

    Danke und Lg

    Montag, 25. Februar 2013 10:59
  • Hi,

    und wie hast Du es dann versucht? Im Code ist nicht zu sehen, dass Du irgendwo clientseitig etwas hättest, dass den benötigten Postback auslösen würde.

    Bzgl. DataBind hatte ich dir ja was geschrieben, das solltest Du ggfs. noch berücksichtigen.

    Du kannst problemlos einen eigenen Button, LinkButton oder ImageButton für die Selektierung oder andere Aktionen einer Zeile verwenden.

    <asp:TemplateField HeaderText="Aktionen">
        <ItemTemplate>
            <asp:Button ID="Select" runat="server" CommandName="Select" Text="Select" />
            <asp:Button ID="Edit"  runat="server" CommandName="Edit" Text="Edit" />
        </ItemTemplate>
    </asp:TemplateField>
    

    Wenn benötigt, kannst Du die Buttons noch CommandArgument='<%# Container.DataItem( "<IDSpalteDesDatensatzes>" ) %>'  angeben.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 25. Februar 2013 12:21
    Moderator
  • Hi,

    und wie hast Du es dann versucht?

    indem ich das CommandField (Auswählen) zusätzlich eingefügt habe.

    <Columns>
        <asp:CommandField ShowSelectButton="True" />
    </Columns>

    Wenn ich jetzt auf dem LinkButton klick wird der Event ausgelöst.

    Du kannst problemlos einen eigenen Button, LinkButton oder ImageButton für die Selektierung oder andere Aktionen einer Zeile verwenden.

    Mein Ziel ist den Event ohne ein CommandField (linkButton, Button, Image) auszulösen.
    Falls das aus irgendeinem Grund nicht funktionieren sollte "muss" ich wohl ein ImageButton nehmen aber da der Bereich in dem die Daten angezeigt werden begrenzt ist wäre mir lieber wenn das durch klick auf die Zeile wie bei WinForm ausgelöst wird.

    Danke im voraus und Lg



    • Bearbeitet String.Rise Montag, 25. Februar 2013 13:42
    Montag, 25. Februar 2013 13:41
  • Hi,

    schau mal hier, da wird das erklärt:

      http://msmvps.com/blogs/deborahk/archive/2010/01/25/asp-net-selecting-a-row-in-a-gridview.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert String.Rise Montag, 25. Februar 2013 19:44
    Montag, 25. Februar 2013 13:58
    Moderator
  • ... hezlichen Dank für den Link.
    Problem gelöst.

    Lg
    String.Rise
    Montag, 25. Februar 2013 19:43