2016-11-16 1 views
1

Ich habe den folgenden Code LoadRegistrations();, um eine DropDownList mit Werten aus einer SQL-Datenbank zu füllen.Übergeben Dropdown-Liste in eine Methode

Ich werde wahrscheinlich dies mehrmals an verschiedenen Orten verwenden, also wollte ich eine Methode schreiben, um sich darum zu kümmern, anstatt diese Methode zu kopieren und kleinere Details zu ändern.

Ich habe so weit gekommen, wie die DataTable bevölkern, aber ich bin nicht sicher, wie etwa Übergabe eines DropDownList & die DataTextField + DataValueField hinein und Binden der Daten zu gehen. Bitte erläutern Sie, was ich

Original-Methode

private void LoadRegistrations() 
    { 
     DataTable reg = new DataTable(); 
     using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString1"].ToString())) 
     { 
      try 
      { 
       SqlDataAdapter adapter = new SqlDataAdapter("select vehicleID, regNo from dbo.Vehicles order by regNo Asc", con); 
       adapter.Fill(reg); 
       ddreg.DataSource = reg; 
       ddreg.DataTextField = "regNo"; 
       ddreg.DataValueField = "vehicleID"; 
       ddreg.DataBind(); 
      } 
      catch (Exception ex) 
      { 
       // Error handling to be done 
      } 

     } 
    } 

Neue Methode

private DataTable PopulateDropdown(string connectionString, DataTable datatable, string query) 
{ 
    DataTable dt = new DataTable(); 
    using (SqlConnection con = new SqlConnection(connectionString)) 
    { 
     try 
     { 
      SqlDataAdapter adapter = new SqlDataAdapter(query, con); 
      adapter.Fill(dt); 
      //What do I do here? I want to bind to a dropdown list passed into this method 
     } 
     catch (Exception ex) { } 
    } 
     return dt; 
} 

ASP erzeugen Dropdown

<asp:DropDownList ID="ddreg" CssClass="form-control" runat="server" AppendDataBoundItems="true"> 
      <asp:ListItem Text="<Select Registration Number>" Value="0" /> 
     </asp:DropDownList> 
+1

Haben Sie versucht, naja, eine 'DropDownList' als Methodenparameter hinzuzufügen? – David

+0

Wenn ich das versuche, bekomme ich einen 'Typ von Namespace fehlt' Fehler. Es ist Codebehind für ein Kind einer Masterseite, nicht sicher, ob ich eine erforderliche Assembly vermisse, aber es scheint in Ordnung zu sein, ein Dropdown-Listenobjekt in meiner ersten Methode innerhalb desselben Skripts zu verwenden. –

Antwort

1

Sie haben eine Methode erstellt zu tun haben, mit Parameter:

private DataTable PopulateDropdown(string connectionString, DataTable datatable, string query) 

Wenn Sie eine DropDownList dieser Methode übergeben wollen, tun genau das, was Sie bereits tun und einen Parameter hinzu:

private DataTable PopulateDropdown(string connectionString, DataTable datatable, string query, DropDownList myDropDownList) 

Dann in der Methode können Sie auf myDropDownList verweisen:

myDropDownList.DataSource = dt; 
myDropDownList.DataBind(); 
Wenn Sie die Methode aufrufen, geben Sie die DropDownList an, die Sie ändern möchten:
PopulateDropDown(someConnectionString, someDataTableYouDoNotUse, someQuery, ddreg); 
+0

Dies ist, was ich suchte. Danke :) Ich musste auch auf 'System.Web.UI.WebControls' verweisen, aber es funktioniert jetzt so, wie ich es wollte. –

0
private DataTable PopulateDropdown(string connectionString, DataTable datatable, string query, System.Web.UI.WebControls.DropDownList yourDropdownList) 
    {  
     SqlDataAdapter adapter = new SqlDataAdapter(query, con); 
     adapter.Fill(dt); 
     yourDropdownList.DataSource = dt; 
     yourDropdownList.DataBind(); 
     return dt; 

    } 
+0

Ich würde damit in meiner Page_Load-Methode wiederholt, wenn ich wirklich nur etwas wie 'PopulateDropdown (connectionString, DataTable, query, yourDropdownList, textField, valueField) aufrufen wollte;' –

Verwandte Themen