Zum Inhalt springen
  • 0

asp.net datanbank-spalte in datagrid mit dropdown


Frage

Geschrieben (bearbeitet)

Moin,

Ich weiß wie ich meine Datenbank-Abfrage als Ergebnis in ein datagridviw packe und mittlerweile auch wie ich ein Dropdown-Feld zum gridview hinzufügen kann - aber jetzt wird es knifflig.

Ich habe eine normale Datenbank-Abfrage, die verknüpfe ich mit meinem Datagridview. Jetzt möchte ich aber das eine der abgefragten Spalten als Dropdownfeld angezeigt wird und natürlich mögliche Optionen beim anklicken als Dropdown angezeigt werden.

Soweit hier mal mein Versuch, ich habe mal ein Dropdownfeld mit 5 Auswahl-Möglichkeiten in denen aber überall nur "System.Data.DataRowVIew" steht statt dem eigentlichen Inhalt.

Aspx:

<asp:GridView ID="dataGridView1" runat="server" OnRowCommand="DataGridView1_RowCommand" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowDataBound="dataGridView1_RowDataBound">
                <AlternatingRowStyle BackColor="White" />
                <Columns>
                    <asp:ButtonField CommandName="Select" HeaderText="Editieren" ShowHeader="True" Text="Edit" ItemStyle-HorizontalAlign="Right">
                        <ItemStyle HorizontalAlign="Right"></ItemStyle>
                    </asp:ButtonField>
                    <asp:TemplateField HeaderText="Anteil(%)">
                        <ItemTemplate>
                            <asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
                <EditRowStyle BackColor="#7C6F57" />
                <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
                <RowStyle BackColor="#E3EAEB" />
                <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
                <SortedAscendingCellStyle BackColor="#F8FAFA" />
                <SortedAscendingHeaderStyle BackColor="#246B61" />
                <SortedDescendingCellStyle BackColor="#D4DFE1" />
                <SortedDescendingHeaderStyle BackColor="#15524A" />
            </asp:GridView>

Code behind:

protected void Page_Load(object sender, EventArgs e)
        {
            db = new Datenbank();
            db.Connect();
            MySqlDataAdapter da = db.Query("select id, name from mitarbeiter;");
            MySqlDataAdapter da2 = db.Query("select anteil from mitarbeiter;");
            DataTable dt = new DataTable();
            dt2 = new DataTable();
            da.Fill(dt);
            da2.Fill(dt2);

            dataGridView1.DataSource = dt;
            dataGridView1.DataBind();

            db.Disconnect();
        }

protected void dataGridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DropDownList ddl = (e.Row.FindControl("DropDownList1") as DropDownList);
                ddl.DataSource = dt2;
                ddl.Items.Add("0");
                ddl.Items.Add("25");
                ddl.Items.Add("50");
                ddl.Items.Add("75");
                ddl.Items.Add("100");
                ddl.DataBind();
            }            
        }

Kann mir jemand auf die Sprünge helfen? Google ist irgendwie nicht so hilfreich wie ich erhofft hatte...

 

Tician

Bearbeitet von Tician

8 Antworten auf diese Frage

Empfohlene Beiträge

  • 1
Geschrieben

Ich weiß nicht, wie's in WebForms ist, aber in allen mir bekannten Frameworks kannst du entweder ein Binding definieren oder per Hand Items hinzufügen. Dadurch, dass du deine DataSource auf dt2 setzt, sind die nächsten Zeilen (wahrscheinlich) wirkungslos.

Die Anzeige "System.Data.DataRowView" kommt daher, dass du als Items eben diese RowViews gebunden hast. Wenn du da was "richtiges" haben möchtest, solltest du entweder die Werte aus den Rows selektieren, die du anzeigen möchtest und die dann binden, oder aber gleich ein ViewModel erzeugen, das dir die Rows als "normale" Objekte darstellt.

 

 

  • 1
Geschrieben (bearbeitet)

Wenn du die Anteile 0, 25, 50, 75 und 100 mit in der Dropdownmenü haben willst, dann musst du diese in die DataTable packen und nicht direkt ins Dropdownmenü.

Ich bin zwar jetzt nun auch kein WebForms-Experte aber um den konkreten Wert anzuzeigen, anstatt "System.Data.DataRowView" reicht es evtl. schon die Eigenschaft DataTextField und DataValueField (damit der konkrete Wert ausgewählt wird) zu setzen. Also:

ddl.DataTextField = "anteil";
ddl.DataValueField = "anteil";

Ansonsten weiß er nicht, was er anzeigen soll und führt einfach auf dem Objekt die ToString()-Methode aus, was eben genau zu deinem Effekt führt.

Bearbeitet von Whiz-zarD
  • 1
Geschrieben

Mal ne ganz doofe Frage:

Wenn du die Anteile eh schon hard-coded machst, Anstatt diese aus der Tabelle auszulesen, warum nimmst du dann nicht gleich eine Enum dafür her.

Du stellst in deiner if Abfrage eine Datasource zur Verfügung, willst aber anschließend der DropDownList selber noch hardcoded Daten hinzufügen.

Ich kenne ja den ganzen Code nicht, mir erschließt sich aber nicht der Sinn dahinter.

  • 0
Geschrieben

Also ich habe die DB-Anfrage an die Tabelle geknüpft und eine Spalte mit Hyperlinks per Hand definiert (funktioniert auch - wenn ich die 2. Spalte, also die DropdownSpalte wieder lösche^^) und hinzugefügt, also das geht irgendwie schon.

Ein Bild des Datagridview ist im ANhang.

Ich denke ich mache es ganz anders und lass die Spalte ohne Dropdown ganz normal wie die anderen anzeigen und mach irgendwas extra um die Spalte zu editieren und wieder in die DB zu schreiben...

Unbenannt.PNG

  • 0
Geschrieben

Die Anteile sollten aus der Tabelle ausgelesen und angezeigt werden, allerdings sollten hard-coded zusätzlich noch Auswahlmöglichkeiten erscheinen. Mir hat mal jemand versuch zu erklären was Enum sein soll aber verstanden habe ich es nicht.

Aber wie gesagt ich mach es jetzt ganz anders, die Tabelle wird mitsamt der 'Anteil'-Spalte normal angezeigt und ich bastel mir auf der "edit"-Seite etwas zusammen womit man das ändern kann - da kann es dann ein ganz normales Dropdown-Feld sein :)

  • 0
Geschrieben (bearbeitet)

 

vor 19 Minuten schrieb Tician:

Aber wie gesagt ich mach es jetzt ganz anders, die Tabelle wird mitsamt der 'Anteil'-Spalte normal angezeigt und ich bastel mir auf der "edit"-Seite etwas zusammen womit man das ändern kann - da kann es dann ein ganz normales Dropdown-Feld sein :)

Ich weiß jetzt nicht, was du dir jetzt davon versprichst. Die Problematik wird die selbe bleiben.

Bearbeitet von Whiz-zarD
  • 0
Geschrieben

Der Unterschied: Hier war erst der Plan die datagrid-Tabelle zu nehmen und die eine Spalte als Dropdown zu formatieren die gleichzeitig aus der Tabelle auslesen und reinschreiben kann.

Jetzt ließt es nur aus und bindet an die Tabelle - einfach. Bei einem Klick auf "edit" (die Hyperlink-Spalte) öffnet sich zum jeweiligen Mitarbeiter eine weitere Seite, dort werde ich ein ganz normales Dropdown-Feld (ohne Tabelle drum rum) nehmen, dieses auslesen und bei einem button-click oder eher select-change (oder wie immer das event heißt) einfach das jeweilige Feld in der Datenbank überschreiben / updaten. Ist mir gerade einfacher als mich weiter mit der Tabelle rumzuprügeln.

  • 0
Geschrieben

Das ändert dennoch nichts an der Tatsache, dass du es hier mit einem DropDownMenü zu tun hast. Ob da rum nun ein DataGrid ist oder nicht, ist doch völlig wurscht. Fakt ist, du willst den Anteil anzeigen, der in der Datenbank gespeichert ist und zusätzlich die verfügbaren Optionen. 

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...