2013-05-05 108 views
0

我有一個列表從對象列表

List<SalesmanDetails> salesmanList 

推銷員細節有姓名,電話號碼,區域找到對象的索引。 我有兩個窗體窗體,一個有一個列表框,另一個允許用戶通過更改文本框中的值來編輯信息。

列表框由「查看所有」按鈕填充,該按鈕顯示列表中的所有銷售員,或者用戶可以搜索名稱(例如Bob Smith),並且列表中的所有Bob Smith將顯示在列表框。

這是代碼我已經得到了所有的觀點:

try 
      {      

       listBox1.Items.Clear(); 
       foreach (SalesmanDetails details in salesmanList) 
       { 
        listBox1.Items.Add(String.Format("{0} {1}", details.firstName, details.surname)); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

這是搜索名稱代碼:

private void btnSearchName_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     foreach (SalesmanDetails search in salesmanList) 
     { 
      if (search.firstName.ToLower().Contains(searchName.ToLower()) | search.surname.ToLower().Contains(searchName.ToLower())) 
      { 
       listBox1.Items.Add(String.Format("{0} {1}", search.firstName, search.surname));       
      } 
     } 
    } 
    catch(Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

當用戶雙擊在列表框的人時,第二種編輯形式顯示該人的詳細信息。因此,如果鮑勃史密斯被點擊,第二種形式將填寫鮑勃史密斯作爲名稱,他的電話號碼和他的地區。

如何在搜索某人時填充編輯表單?

回答

2

您需要綁定到列表。

屬性添加到您的對象名爲全名:

public string FullName { get { return String.Format("{0} {1}", search.firstName, search.surname); } } 

然後綁定:

listBox1.DataSource = currentSalesmanList; // filtered or all 
listBox1.DisplayMember = "FullName" 
listBox1.ValueMember = "SalesmanId"; // (optional) something to uniquely identify 

然後處理SelectedValueChanged活動 - 的SelectedIndex將在緩存的銷售人員的名單相同指數:

private void listBox1_SelectedValueChanged(object sender, EventArgs e) 
{ 
    if (listBox1.SelectedIndex != -1) 
    { 
     Salesman salesman = currentSalesmanList[listBox1.SelectedIndex]; 
     textBox1.Text = salesman.firstName; 
    } 
} 

重寫您的搜索過濾主要salesmanList dumpin g將結果寫入「currentSalesmanList」,然後綁定到它。

private void btnSearchName_Click(object sender, EventArgs e) 
{ 
    currentSalesmanList = salesmanList.Where((s) => s.firstName.ToLower().Contains(searchName.ToLower())); 

    listBox1.DataSource = currentSalesmanList; // filtered or all 
    listBox1.DisplayMember = "FullName" 
    listBox1.ValueMember = "SalesmanId"; // (optional) something to uniquely identify 

} 
+0

「ValueMember」的+1。我只是現在想出了這個屬性。 – Saravanan 2013-05-05 13:18:46

+0

爲selectedValueChanged,文本框是另一種形式,所以我將如何填充它? – Pindo 2013-05-05 14:54:36

+0

您需要另一個名爲「CurrentSalesman」的全局/靜態(或其他緩存對象)。它將代表當前選定的推銷員。使用從「listBox1_SelectedValueChanged」列表中選擇的對象填充此緩存對象。 – 2013-05-05 15:08:13

0

做一招:

定義一個全局的數組,這個數組是要挽救誰已被過濾被搜索人的索引。

在這個例子中

public List<Int32> myList = new List<Int32>(); 

然後定義你的搜索功能的計數器。並像這樣改變它:

private void btnSearchName_Click(object sender, EventArgs e) 
    { 
     Int32 counter = 0; 
     try 
     { 
      foreach (SalesmanDetails search in salesmanList) 
      { 
       if (search.firstName.ToLower().Contains(searchName.ToLower()) | search.surname.ToLower().Contains(searchName.ToLower())) 
       { 
        listBox1.Items.Add(String.Format("{0} {1}", search.firstName, search.surname)); 
        myList.Add(counter); 
       } 
       counter++; 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

你將有myList中過濾的人的真實索引。

使用此列表,您可以通過sealsmanList捕獲選定的索引數據。