2016-07-19 13 views
0

Ich habe ein Dropdownlist in einem Gridview und ich bin zu wollen, der ausgewählte Wert haben, was der Wert für diese bestimmte Person in der DatenbankSet Dropdownlist des SelectValue basierend auf Datenbank

Mein ASP-Code für das Dropdownlist:

<asp:TemplateField HeaderText="Team" SortExpression="Team"> 
       <ItemTemplate> 
        <asp:DropDownList ID="ddlTeam" runat="server" 
        DataSourceID="SqlDataSource1" DataTextField="Team" 
         DataValueField="Team" ondatabound="ddlTeam_DataBound"> 
        </asp:DropDownList> 
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
         ConnectionString="<%$ ConnectionStrings:connectionString %>" 
         SelectCommand="SELECT DISTINCT [Team] FROM [Team_Names]"></asp:SqlDataSource> 
       </ItemTemplate> 
      </asp:TemplateField> 

Mein ddlTeam_OnBound:

protected void ddlTeam_DataBound(object sender, EventArgs e) 
     { 
      DropDownList ddl = (DropDownList)sender; 
      foreach (ListItem item in ddl.Items) 
      { 
       if (item.Text == "valor") 
       { 
        item.Text = "Team Valor"; 
       } 
       else if (item.Text == "mystic") 
       { 
        item.Text = "Team Mystic"; 
       } 
      } 
     } 

UPDATE - Kein Fehler, aber DDL ist leer:

DropDownList ddl = new DropDownList(); 
       string query2 = "SELECT team_name FROM sec WHERE job = " + TextBox1.Text; 
       using (SqlConnection con = new SqlConnection(connectionString)) 
       { 
        using (SqlCommand cmd = new SqlCommand(query2, con)) 
        { 
         con.Open(); 
         using (SqlDataReader read = cmd.ExecuteReader()) 
         { 
         while(read.Read()) 
         { 
          ddl.SelectedValue = read["team_name"].ToString(); 
         } 
         } 
         con.Close(); 
        } 
       } 

Antwort

0

Sie führen den SqlCommand nicht aus oder öffnen eine SqlConnection. Sie sollten Ihre Eingabe in einen Parameter eingeben, um einen möglichen SQL Injection-Angriff zu verhindern.

Als Beispiel:

  string teamName = string.Empty; 
      using (SqlConnection connection = new SqlConnection("your connection string")) 
      { 
       connection.Open(); 

       string query = "SELECT DISTINCT team_name FROM sec WHERE job = @job"; 
       SqlParameter param = new SqlParameter 
       { 
        ParameterName = "@job", 
        Value = TextBox1.Text 
       }; 

       using (SqlCommand command = new SqlCommand(query, connection)) 
       { 
        command.Parameters.Add(param); 
        SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleRow); 

        if (reader.Read()) 
        { 
         teamName = reader.GetString(0); 
         // or 
         int ord = reader.GetOrdinal("team_name"); 
         teamName = reader.GetString(ord); // Handles nulls and empty strings. 
        } 
       } 
      } 

EDIT

Sie müssen auch die korrekte Schreibweise Ihrer Dropdown-Liste einrichten.

DropDownList ddl = new DropDownList(); 
ddl.DataSource = // call your database code - see above 
ddl.DataValueField = "ValueProperty"; 
ddl.DataTextField = "TextProperty"; 
ddl.DataBind(); 

ddl.SelectedValue = teamName; 
+0

Entschuldigung, ich habe all das - ich habe einfach aus Gründen der Einfachheit weggelassen - mein Problem ist, dass ich die ddl-Elemente aus einer Tabelle ziehe und den ursprünglich ausgewählten Wert aus einer anderen Tabelle abrufen muss. – a1yx

+0

Ok, deine ursprüngliche Frage war etwas verwirrend. Also ist Ihre Frage, dass Sie eine DropDownList basierend auf einem anderen DropDownList ausgewählten Wert aus der Datenbank füllen möchten? –

+0

Nein Ich beziehe eine Liste aus einer Tabelle (team_names), aber ich möchte, dass der anfängliche selectedvalue aus einer anderen Tabelle (sec) kommt. – a1yx

0

alles in einer Abfrage in SqlDataSource Do und Code nicht hinter ohne Notwendigkeit verwenden.

<asp:TemplateField HeaderText="Team" SortExpression="Team"> 
    <ItemTemplate> 
     <asp:DropDownList ID="ddlTeam" runat="server" 
     DataSourceID="SqlDataSource1" DataTextField="Team_txt" 
      DataValueField="Team"><%--No need ondatabound="ddlTeam_DataBound"--%> 
     </asp:DropDownList><%--datasourceId must match --%> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:connectionString %>" 
      SelectCommand="SELECT DISTINCT [Team],case Team when 'valor' then 'Team Valor' when 'mystic' then 'Team Mystic' else Team end team_txt FROM [Team_Names]"></asp:SqlDataSource> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

Das Problem dabei ist, dass ich die gesamte Liste der Team-Namen mit dem ausgewählten Wert anzeigen muss, ist der aktuelle Wert mit dieser Person in der Datenbank verbunden – a1yx

+0

OK. gebe 'ddlTeam_DataBound' an den Code zurück und setze' .SelectedValue' darin. Aber nichts mehr. –

+0

Ich kann es in der DataBound-Methode nicht tun, da es von einem TextBox-Eintrag abhängig ist. Was ich getan habe, war den Code, der in der TextChanged-Methode in der aktualisierten Abschnitt oben ist, aber es funktioniert nicht – a1yx