2016-07-21 8 views
-3

Ich habe eine Dropdown-Liste in einem Gridview und wenn das Textfeld geändert wird, möchte ich den ausgewählten Wert in den Dropdown-Listen (drei separate insgesamt) mit den Daten in der Datenbank übereinstimmen. Der Code für den Fall Textbox geändert unter:Setzen Sie den ausgewählten Wert von DropDownList basierend auf der Datenbank

protected void TextBox1_TextChanged(object sender, EventArgs e) 
    { 
     DropDownList ddl = new DropDownList(); 
     string connectionString = ConfigurationManager.ConnectionStrings["*******"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(connectionString)) 
     { 
      string query = "SELECT one, two, three FROM table WHERE id = " + TextBox1.Text; 
      SqlDataAdapter sda = new SqlDataAdapter(query, con); 
      DataSet ds = new DataSet(); 
      int num = sda.Fill(ds); 
      if (num > 0) 
      { 
       GridView1.Visible = true; 
       GridView1.DataSource = ds; 
       GridView1.DataBind(); 
      } 
      else 
      { 
       if (num == 0) 
       { 
        GridView1.Visible = false; 
       } 
       else 
       { 
        BindGrid(); 
       } 
      } 
     } 
+0

Ihr Design ist anfällig für SQL-Injektion. Was passiert, wenn jemand dies in "TextBox1" eingegeben hat: "1; drop database DB_NAME()". Validatoren verhindern dies nicht vollständig, ein Hacker könnte den ViewState modifizieren, um dies zu umgehen. –

+0

Die Textbox darf nur bis zu zehn Zeichen enthalten und erlaubt nur ganze Zahlen. In dem Moment, in dem Sie versuchen, etwas anderes einzugeben, wird es Sie auffordern. Und ich schwöre feierlich, dass ich es parametrisieren werde, ich möchte es zuerst arbeiten lassen (zwei Tage und Zählung) – a1yx

+0

Soll Ihre Abfrage genau eine Reihe zurückgeben? –

Antwort

0

Versuchen Sie, die RowDataBound Ereignis verwenden. Damit dies funktioniert, müssen die Dropdown-Listen bereits mit Werten gefüllt sein, und in diesem Fall wird die zugewiesen.

protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // this assumes the drop-down-list columns are the first, second, and third columns (ordinal positions 0, 1, and 2) 
     DropDownList ddl1, ddl2, ddl3; 
     ddl1 = (DropDownList)e.Row.Cells[0].Controls[0]; 
     ddl2 = (DropDownList)e.Row.Cells[1].Controls[0]; 
     ddl3 = (DropDownList)e.Row.Cells[2].Controls[0]; 
     DataRow currentRow = (DataRow)e.Row.DataItem; 
     ddl1.SelectedValue = currentRow[0].ToString(); 
     ddl2.SelectedValue = currentRow[1].ToString(); 
     ddl3.SelectedValue = currentRow[2].ToString(); 
    } 
} 
Verwandte Themen