Entwickler-Ecke

ASP.NET und Web - ID von Item in DropDownList


TheSoul - Mo 11.10.10 09:30
Titel: ID von Item in DropDownList
Hallo Zusammen

Ich arbeite zurzeit an einer Benutzerverwaltung mit ASP.

Ich habe eine Datenbank, mit drei verschiedenen Tabellen.

Tabellen:
-User
-Job
-Salutation

User hat eine Beziehung zu Job und Salutation.

Deshalb habe ich beim Formular, um einen User zu erstellen/bearbeiten, eine DropDownList erstellt, welche die Daten aus Job oder Salutation ausliest.

Wenn ich nun einen Job auswähle(z.B Entwickler), will ich, dass es mir die ID(aus der Datenbank) vom Entwickler speichert.

Hier noch ein Teilcode:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
<asp:DropDownList ID="drpSalutation" runat="server" 
            DataSourceID="salutation_id" DataTextField="salutation_name" 
            DataValueField="salutation_id" Width="289px">
        </asp:DropDownList>
        <asp:SqlDataSource ID="salutation_id" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
            SelectCommand="SELECT [salutation_name] FROM [tblSalutation]">
</asp:SqlDataSource></td></tr>


traceurmicha - Mo 11.10.10 10:14

Ich würd das ganze im Hintergrund über C# laufen lassen.

Das du sagst:


C#-Quelltext
1:
<asp:DropDownList .... AutoPostBack="true"></asp:DropDownList>                    


und dann in der .aspx.cs Datei


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
private string id = "";

protected void Page_Load(object sender, EventArgs e)
{
    if(IsPostBack)
    {
        BerufAenderung();
    }
}

private void BerufAenderung()
{
    //Die SQL Verbindung aufbauen
    SqlCommand com = new SqlCommand("Select ID from Job where Bezeichnung="+ddl_job.text,sqlverbindung);
    SqlDataReader dr = com.SqlExecuteNonQuery();
    if(dr.Read())
        id = dr[0].ToString();
}

Falls ich gerade blödsinn erzählt hab, sagt es ruhig, denn nur aus Fehlern lernt man^^


TheSoul - Di 12.10.10 07:31

Danke traceurmicha für deine Hilfe.

Wie kann ich diese Funktion umschreiben, dass es mir die job_id als Integer Wert zurückgibt?

Ich bin echt nicht weitergekommen seit gestern...


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
 public DataSet getDropDownJobId(string name)
        {
            DataSet result = 0;
            SqlParameter[] param = new SqlParameter[1];

            param[0] = new SqlParameter();
            param[0].SqlDbType = SqlDbType.VarChar;
            param[0].ParameterName = "@job_name";
            param[0].Value = name;

            result = SqlHelper.ExecuteDataset(con, CommandType.Text, "SELECT job_id FROM tblJob WHERE job_name = @job_name", param);

            return result;
        }


Danke schon im Voraus..


TheSoul - Di 12.10.10 07:33

Bin einbisschen weitergekommen.. Leider funktioniert es weiterhin nicht. Beim Ausführen kommt die Fehlermeldung "Ungültiger Leseversuch, wenn keine Daten vorhanden sind." Daten sind jedoch vorhanden, das gleiche Query habe ich auch unter Microsoft SQL Server Management getestet und es gab mir die korrekten Daten zurück.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
public int getDropDownJobId(string job_name)
        {
            SqlParameter[] param = new SqlParameter[1];
            int ID = 0;
            param[0] = new SqlParameter();
            param[0].SqlDbType = SqlDbType.VarChar;
            param[0].ParameterName = "@job_name";
            param[0].Value = job_name;

            SqlDataReader sdr = SqlHelper.ExecuteReader(con, CommandType.Text, "SELECT job_id FROM tblJob WHERE job_name = '" + job_name + "'", param);

            if (sdr.HasRows)
            {

                ID = Convert.ToInt32(sdr["job_id"]);
            }
        
            return ID;
        }


Wo könnte das Problem liegen?


TheSoul - Di 12.10.10 08:49

Es fehlte ein sdr.Read() bei der If-Abfrage. Nun funktionierts.