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);
    }
}

当用户双击列表框中的某个人时,将显示第二个用于编辑的表单,其中包含该人的详细信息。因此,如果单击 Bob Smith,第二个表单将填充 Bob Smith 作为姓名、他的电话号码和他的地区。

搜索某人时如何填充编辑表单?

4

2 回答 2

2

您需要绑定到列表。

为您的对象添加一个名为 FullName 的属性:

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;
    }
}

重写您的搜索以过滤将结果转储到“currentSalesmanList”中的主要salesmanList,然后绑定到它。

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

}
于 2013-05-05T13:02:55.680 回答
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 捕获所选索引的数据。

于 2013-05-05T13:06:43.303 回答