2011-06-03 87 views
0

我已經嘗試了一切,但無法弄清楚如何用我的下拉選擇填充gridview。我檢查了下拉列表的值,這是正確的,gridview將顯示所有項目,但不是我想要的項目。我正在使用網絡表單。以下是我的代碼。C#從Dropdown選項填充Gridview

protected void Page_Load(object sender, EventArgs e) 
     { 
      Populate(); 
     } 

     protected void btnDisplay_Click(object sender, EventArgs e) 
     { 
      SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString); 
      myConnection.Open(); 

      try 
      { 
       SqlDataReader reader = null; 
       string serverIP = drpChoose.SelectedItem.Value.ToString(); 
       SqlCommand cmd = new SqlCommand("SELECT * from ScheduledTasks WHERE ServerIP = " + serverIP, myConnection); 

       reader = cmd.ExecuteReader(); 

       while (reader.Read()) 
       { 
        GridView1.DataSource = reader; 
        GridView1.DataBind(); 
       } 
      } 

      catch (Exception ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 

      myConnection.Close(); 
     } 

     public void Populate() 
     { 
      SqlConnection myConnection1 = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString); 
      myConnection1.Open(); 

      SqlCommand cmd1 = new SqlCommand("SELECT ServerIP FROM Servers", myConnection1); 
      SqlDataReader dropReader; 
      dropReader = cmd1.ExecuteReader(); 

      drpChoose.DataSource = dropReader; 
      drpChoose.DataTextField = "ServerIP"; 
      drpChoose.DataValueField = "ServerIP"; 
      drpChoose.DataBind(); 
     } 
    } 

任何幫助將不勝感激。

+0

如果您正在使用SQL Server,請使用存儲過程,並將實際參數與SQLCommand對象關聯。 – JonH 2011-06-03 17:10:54

+0

我得到它的工作我爲serverIP創建一個參數,然後將其設置爲我的變量serverIP。謝謝大家。 – Matt 2011-06-03 17:26:53

回答

0

您不需要在每次回發後重新綁定下拉列表,否則您將丟失選定的項目。試試下面的:

protected void Page_Load(object sender, EventArgs e) 
     { 
     if(!Page.IsPostBack) 
      { 
      Populate();     
      } 

    } 

    protected void btnDisplay_Click(object sender, EventArgs e) 
    { 
     SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString); 
     myConnection.Open(); 

     try 
     { 
      SqlDataReader reader = null; 
      string serverIP = drpChoose.SelectedItem.Value.ToString(); 
      SqlCommand cmd = new SqlCommand("SELECT * from ScheduledTasks WHERE ServerIP = " + serverIP, myConnection); 

      reader = cmd.ExecuteReader(); 

      while (reader.Read()) 
      { 
       GridView1.DataSource = reader; 
       GridView1.DataBind(); 
      } 
     } 

     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 

     myConnection.Close(); 
    } 

    public void Populate() 
    { 
     SqlConnection myConnection1 = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString); 
     myConnection1.Open(); 

     SqlCommand cmd1 = new SqlCommand("SELECT ServerIP FROM Servers", myConnection1); 
     SqlDataReader dropReader; 
     dropReader = cmd1.ExecuteReader(); 

     drpChoose.DataSource = dropReader; 
     drpChoose.DataTextField = "ServerIP"; 
     drpChoose.DataValueField = "ServerIP"; 
     drpChoose.DataBind(); 
    } 
} 
+0

這仍然沒有工作。我的網格不顯示。但是,當我將SQL命令更改爲SELECT * FROM TABLE而沒有WHERE時,它工作正常。 – Matt 2011-06-03 17:03:53

0

更改您的Page_Load方法:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack()) { 
     Populate(); 
    } 
} 

在每一個頁面加載,你重新綁定下拉選擇,使默認的「所有」值將始終設置。通過使用Page.IsPostBack屬性,您告訴頁面只綁定第一次加載,而不是後續回發。通過使用此屬性,下拉列表中的選定項目在回發時不會更改。

MSDN:Page.IsPostBack

更新

關於你提到的關於你的SQL語句中的 「where」 子句評論,存儲在數據庫中的文本服務器IP?嘗試使用撇號包裝serverIP:

SqlCommand cmd = new SqlCommand("SELECT * from ScheduledTasks WHERE ServerIP = '" + serverIP + "'', myConnection); 
+0

我正在從SQL填充的下拉列表中獲取serverIP。字符串serverIP = drpChoose.SelectedItem.Value.ToString();我測試了serverIP的價值,它似乎正在工作。 – Matt 2011-06-03 17:11:18

+0

是的,但serverIP如何存儲在SQL Server?它的數據類型是什麼? – 2011-06-03 17:23:34

+0

我通過創建參數來實現它。是的,它被存儲爲文本。 – Matt 2011-06-03 19:33:48

0

只是一個指南:爲什麼不使用Ajaxtoolkit UpdatePanel控件。 將Gridview放入UpdatePanel,然後將下拉選項設置爲Gridview的更新觸發器。然後您不必擔心回發和值。