具有多个列表的多个控件C#

时间:2015-07-19 06:31:25

标签: c# list class listview combobox

第一次发帖,希望我没有复制已经问过的问题,我已经完成了几次搜索并多次重写我的代码无济于事。我的问题来自多个角度。关于我的计划的一些背景信息。

我实际上是创建一个客户数据库,它在CustomerEntry列表中存储Customer类型的对象,并在列表ReportList中存储InspectionReport类型的对象。然后,我使用ListView在详细信息视图中显示CustomerList项目以供选择。从这时起,用户可以添加更多客户,查看选定客户,删除客户,添加报告和查看报告(一旦添加)。

我的问题是,一旦在ComboBox中选择了一个报告并被选中进行查看,它就会查看列表中的错误项目。

我的代码的问题区域如下:

    private void ViewReportButton_Click(object sender, EventArgs e)
    {
        int selIndex = CustomerListView.SelectedIndices[0];
        int selIndex2 = AvailableReportsDropDownBox.SelectedIndex;
        tabControl.SelectedTab = tabInspReport;
        populateViewReportTabOutputControls(selIndex, selIndex2);
        activateViewReportTabOutputControls();
    }

    public void populateViewReportTabOutputControls(int selIndex2)
    {
        ViewCustNameLabel.Text = ReportList[selIndex2].getCustomerName();
        ViewDateLabel.Text = Convert.ToString(ReportList[selIndex2].getInspectionDate());
        ViewAddressLabel.Text = ReportList[selIndex2].getCustomerAddress();
        AeratorStatusBox.Text = ReportList[selIndex2].getAeratorStatus();
        FilterStatusBox.Text = ReportList[selIndex2].getFilterStatus();
        HLAFloatStatusBox.Text = ReportList[selIndex2].getHLAFloatStatus();
        OnOffFloatStatusBox.Text = ReportList[selIndex2].getOnOffFloatStatus();
        SprayHeadStatusBox.Text = ReportList[selIndex2].getSprayHeadStatus();
        SludgeLevelOutputBox.Text = Convert.ToString(ReportList[selIndex2].getSludgeLevel());
        InspectorsNameOutputBox.Text = ReportList[selIndex2].getInpsectorName();
    }

我想知道的是;有没有更好的方法来显示ComboBox中将链接到特定非数据绑定列表项的选定项目。

例如,我选择了客户[1],报告列表中有10个报告,其中4个属于所述客户,但是当我选择comboBox中的第一个报告时,而不是给我来自ReportList [0]的项目,它让我说ReportList [4],这是所选客户的第一份报告。

提前致谢。

1 个答案:

答案 0 :(得分:0)

所以我已经做了这个临时解决方案,现在似乎有效,但我仍然愿意接受更好的建议。

首先我在检查报告类中添加了一个新的成员变量,如下所示:

    public class InspectionReport
    {
        //there are other unrelated members as well
        private string complexID;
        //constructor would be here
        //getters and setters
        public void setComplexID(string inputCustomerName, DateTime inputInspectionDate)
        {
            complexID = Convert.ToString(inputCustomerName + inputInspectionDate);
        }
        public string getComplexID()
        {
            return complexID;
        }
    }

然后我做了它,以便" complexID"将用作组合框中显示的文本。

    public void fillAvalableReportsDropDownBox()
    {
        if (CustomerListView.SelectedItems.Count > 0) 
        {
            clearAvailableReportsDropDownBox();
            if (CustomerListView.SelectedItems.Count == 0)
            {

            }
            else if (CustomerListView.SelectedItems.Count > 0)
            {
                int selIndex = CustomerListView.SelectedIndices[0];
                if (selIndex >= 0 && selIndex < ReportList.Count)
                {
                    int COUNT = ReportList.Count;
                    int x = 0;
                    while (x < COUNT)
                    {
                        if (ReportList[x].getCustomerName().Contains(CustomerList[selIndex].getFirstName() + " " + CustomerList[selIndex].getLastName()))
                        {
                            AvailableReportsDropDownBox.Items.Add(Convert.ToString(ReportList[x].getComplexID()));
                        }
                        x++;
                    }
                }
            }
        }
    }

然后我更改了我的populate方法的参数以使用&#34; complexID&#34;值。我还做了一个基本上循环通过我的&#34; ReportList&#34;直到它找到具有匹配&#34; complexID&#34;的报告。并将我的输出框设置为该报告的值。

    public void populateViewReportTabOutputControls(string selIndex2)
    {
        int x = 0;
        while (x < ReportList.Count)
        {
            if (ReportList[x].getComplexID() == selIndex2)
            {
                ViewCustNameLabel.Text = ReportList[x].getCustomerName();
                ViewDateLabel.Text = Convert.ToString(ReportList[x].getInspectionDate());
                ViewAddressLabel.Text = ReportList[x].getCustomerAddress();
                AeratorStatusBox.Text = ReportList[x].getAeratorStatus();
                FilterStatusBox.Text = ReportList[x].getFilterStatus();
                HLAFloatStatusBox.Text = ReportList[x].getHLAFloatStatus();
                OnOffFloatStatusBox.Text = ReportList[x].getOnOffFloatStatus();
                SprayHeadStatusBox.Text = ReportList[x].getSprayHeadStatus();
                SludgeLevelOutputBox.Text = Convert.ToString(ReportList[x].getSludgeLevel());
                InspectorsNameOutputBox.Text = ReportList[x].getInpsectorName();
            }
            x++;
        }
    }

在这里,您可以看到我现在将selIndex设置为所选的文本,这与&#34; complexID&#34;相同。值。

    private void ViewReportButton_Click(object sender, EventArgs e)
    {
        string selIndex2 = AvailableReportsDropDownBox.SelectedItem.ToString();
        tabControl.SelectedTab = tabInspReport;
        populateViewReportTabOutputControls(selIndex2);
        activateViewReportTabOutputControls();
    }