Wie kann ich den ausgewählten Wert aus der Dropdown-Liste im Bearbeitungsmodus einer Rasteransicht abrufen?

StackOverflow https://stackoverflow.com/questions/5979048

Frage

Wenn ich in meiner Anwendung eine Zeile in der Rasteransicht bearbeite, wähle ich einige neue Daten aus einer Dropdown-Liste aus.

Ich fülle das Dropdown-Menü wie folgt aus:

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if ((e.Row.RowState & DataControlRowState.Edit) > 0)
            {
                DropDownList emailsListDL = (DropDownList)e.Row.FindControl("emailsDL");
                emailsListDL.DataSource = allUsersEmails;//list of strings with the emails of the users
                emailsListDL.DataBind();
            }
        }
    }

Aber wenn ich in der Vorlage auf die Schaltfläche „Aktualisieren“ drücke und das Ereignis „RowUpdating“ eingebe, ist der ausgewählte Wert aus der Dropdown-Liste jedes Mal der erste Wert aus dieser Dropdown-Liste.

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        DropDownList emailsListDL = (DropDownList)GridViewAdvertisers.Rows[e.RowIndex].FindControl("emailsDL");
        string email = emailsListDL.SelectedValue; //the selected value is every time the first value from the dropdownlist
    }

Hat jemand irgendwelche Ideen?

Ich habe viele Möglichkeiten ausprobiert, den ausgewählten Wert im „RowDataBound“-Ereignis festzulegen, aber ohne Erfolg.Ich habe Folgendes versucht:

1. emailsListDL.SelectedIndex = emailsListDL.Items.IndexOf(emailsListDL.Items.FindByValue(DataBinder.Eval(e.Row.DataItem, "OwnerMail").ToString()));
2. emailsListDL.SelectedValue = GridViewAdvertisers.DataKeys[e.Row.RowIndex]["OwnerMail"].ToString();
3. emailsListDL.SelectedValue = GridViewAdvertisers.Rows[e.Row.RowIndex].Cells[1].Text;
//ownerMail is a string (object) from the list of objects that I put as datasource to the gridview

Danke, Jeff

Aktualisieren

Meine Artikelvorlage von der ASPX-Seite ist:

 <asp:TemplateField ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle"
                ItemStyle-Width="150px" HeaderText="Owner Email" HeaderStyle-HorizontalAlign="Left"
                HeaderStyle-BorderWidth="1px" HeaderStyle-BorderColor="#e1e1e1">
                <ItemTemplate>
                    <asp:Label ID="LabelEmail" runat="server" Text='<%# Bind("OwnerMail")%>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="emailsDL" runat="server" Width="150">
                    </asp:DropDownList>
                </EditItemTemplate>
                <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" Font-Bold="True"></HeaderStyle>
                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="180px" BorderWidth="1px"
                    BorderColor="#e1e1e1"></ItemStyle>
    </asp:TemplateField>
War es hilfreich?

Lösung

Der ausgewählteIndex wird immer standardmäßig auf 0 default, wenn Sie ihn in Ihrer Dropdownlist-Definition nicht definieren.

edit: @tim Schmelter sollte seinen Kommentar als Anwer hinzufügen.In der Zwischenzeit werde ich für andere Leser aufschreiben: Sie müssen nach Postback überprüfen (siehe Kommentare oben).

Andere Tipps

Sie können a deklarieren ComboBox mainBX = new Combobox();und Sie können ein Ereignis deklarieren

private void onSeletedIndexChange(object sender,EventArgs e)
{
        mainBX = (ComboBox)(sender);
}

und als nächstes sollten Sie foreach ComboBox in GridView iterieren und dieses Event hinzufügen.Dann sollten Sie lediglich mainBX.seletedItem();

Ich denke, das ist es, was Sie brauchen, wenn nicht, entschuldigen Sie sich.

Um den ausgewählten Wert in der generationspflichtigen Ereignis generell einzustellen, sollten Sie dies so tun: generasacodicetagpre.

findbyvalue findet den aktuellen Textwert des Felds im "normalen" ViewMode und setzt die Dropdownliste mit dem Wert.

Natürlich muss dies in gekapselt werden generasacodicetagpre.

Wie für Ihr "Erhalten des Wertes beim Update" -Problem, muss ich ehrlich sagen, ich habe keine Ahnung, da Ihr Ansatz genau wie meine ist, nur Unterschied: Mine funktioniert.

Hier ist mein Code, wenn es irgendwelche Hilfe ist: generasacodicetagpre.

Ich hatte das gleiche Problem mit einer anderen Lösung, ich hatte benutzerdefinierte Paging auf der GridView mit einem benutzerdefinierten Pager implementiert, und in dem Prozess fügte die ROWCommand-Methode hinzu, die das Raster mit einem neuen Seitenindex widersetzte.Wie es geschieht, wird jedoch während der Aktualisierung auch die RowCommand-Methode aufgerufen.

SO Stellen Sie sicher, dass Sie andere Orte überprüfen Sie können irgendwo in Ihrem Code verbindlich sein. Hoffe, das hilft jemandem anders. generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top