第一次发帖,希望我没有复制已经问过的问题,我已经完成了几次搜索并多次重写我的代码无济于事。我的问题来自多个角度。关于我的计划的一些背景信息。
我实际上是创建一个客户数据库,它在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],这是所选客户的第一份报告。
提前致谢。
答案 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();
}