2014-11-25 89 views
0

当我的表单加载区域列表框时,我有两个列表框(区域和分区)填充了4个区域(中西部,东北,南部,西部)。当我点击其中一个区域时,我希望Divisions列表框填充与点击区域相关的分区。我正在通过与我的SQL数据库进行通信的数据存储库。 在形式负载初始种群如何根据另一个列表框中的选定项目填充列表框?

StateRepository sr = new StateRepository(); 
foreach (string s in sr.GetRegions()) 
{ 
    lstRegions.Items.Add(s); 
} 

背后的GetRegions方法代码:

public IEnumerable<string> GetRegions() 
{ 
    try 
    { 
     List<string> results = new List<string>(); 
     using (var conn = new SqlConnection(Settings.Default.StateAnalysisConnection)) 
     { 
      using (var cmd = conn.CreateCommand()) 
      { 
       cmd.CommandText = "Select * From Regions "; 
       conn.Open(); 
       using (var reader = cmd.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         results.Add((string)reader["Region"]); 
        } 
       } 
      } 
     } 

     return results; 
    } 
    catch (Exception ex) 
    { 
     throw new Exception("Database error in StateRepository", ex); 
    } 
    finally 
    { 
     if (connection.State == ConnectionState.Open) 
      connection.Close(); 
    } 
} 

是可以获得师在区域从所述分贝的方法:

public IEnumerable<string> GetDivisionsInRegion(string region) 
{ 
    try 
    { 
     List<string> results = new List<string>(); 
     var divisions = new List<string>(); 
     using (var conn = new SqlConnection(Settings.Default.StateAnalysisConnection)) 
     { 
      using (var cmd = conn.CreateCommand()) 
      { 
       cmd.CommandText = "Select Division From Divisions " 
        + "Where Region = '" + region + "'"; 
       conn.Open(); 
       using (var reader = cmd.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         results.Add((string)reader["Division"]); 
        } 
       } 
      } 
     } 

     return results; 
    } 
    catch (Exception ex) 
    { 
     throw new Exception("Database error in StateRepository", ex); 
    } 
    finally 
    { 
     if (connection.State == ConnectionState.Open) 
      connection.Close(); 
    } 
} 

回答

1

SelectedIndexChanged事件的你的Regions listbox,得到选定的区域,然后在你的GetDivisionsInRegion方法中使用它并填充Divisions列表框与结果。

private void Regions_SelectedIndexChanged(object sender, System.EventArgs e) 
{ 
    // Get the currently selected item in the ListBox. 
    string region = Regions.SelectedItem.ToString(); 

    // Find the divisions in the region 
    IEnumerable<string> divisions = GetDivisionsInRegion(region); 

    //set as this as the new data source for your Divisions listbox 
    Divisions.DataSource = divisions; 
} 

虽然我想你可能不得不铸师List<string>或让你的GetDivisionsInRegion返回一个List<string>

+0

好吧,这很好,我把它应用到第三个列表框。但在第三个盒子中,它使用我的类的ToString()方法。因此,我没有介绍StateAbberv,而是简单描述了我的状态。有没有办法解决这个问题? – ScottT 2014-11-25 03:44:13

+0

将其转换为对象,然后使用属性(StateAbbrev也许?)来获取所需的值。 – monty 2014-11-25 04:15:05

相关问题