Windows窗体应用
好的抱歉,我有一节课
public class comm
{
private int dayV;
private string timeV;
private decimal priceV;
private string nameValue;
private string descriptionV;
public comm(string Day, string Time, string Price, string Name, string Description)
{
try
{
this.dayV = Convert.ToInt32(Day);
}
catch (Exception ex)
{
}
this.timeV = Time;
decimal PriceVal;
var irishCulture = CultureInfo.CreateSpecificCulture("en-IE");
if (decimal.TryParse(Price, NumberStyles.Currency, irishCulture, out PriceVal))
{
this.priceV = Convert.ToDecimal(PriceVal);
}
this.nameValue = Name;
this.descriptionV = Description;
}
public int GetDay() { return dayV; }
public string GetTime() { return timeV; }
public string GetPrice() { return (Convert.ToString(priceV)); }
public string GetName() { return nameValue; }
// Returns full event Description
public string Description()
{
string price = "Price: ";
return timeV + "\r\n" + price + "€" + priceV + "\r\n" + this.descriptionV;
}
}
我将文本文件读入List并将每个字段分配到相应的类实例变量中。
文本文件如下所示
1,02:29 pm,€55.00,John D,Main st
1,05:43 pm,€70.00,John D,Bridge st
2,01:43 pm,€100.00,Mike O,First Floor A12
1,10:44 am,€100.00,Colm Collins,First Floor A13
2,11:44 am,€110.00,Martin O, Exp 01
读取文件的方法。
public List<communityEvent> CreateList()
{
List<comm> entries = new List<comm>();
try
{
StreamReader fileIn = new StreamReader(path);
//Read the file
while (!fileIn.EndOfStream)
{
String line = fileIn.ReadLine();
String[] pieces = line.Split(',');
if (pieces.Length == 5)
{
comm Eve = new comm(pieces[0], pieces[1], pieces[2], pieces[3], pieces[4]);
entries.Add(Eve);
}
return entries;
在主程序中
private List<comm> various;
private void ExtractData(string eventComboBox)
{
var query = from v in various
where vComboBox == v.GetName()
select v.Description();
foreach (var vr in query)
{
descriptionTextBox.Text = vr;
}
}
因此组合框内容如下所示: -
John D
John D
Colm Collins
Martin O
我想要的是,每次用户选择不同的名称。 我得到相应的描述()例如。选择后的第一个John D将使用Description()填充描述文本框,Description()应该是该行的字段。 我遇到的问题是,有些名称是相同的,描述只返回所有具有相同名称的人的第一个描述(),无论我选择哪一个。
答案 0 :(得分:1)
感谢您提供的补充信息。它仍然含糊不清 - 我不知道“个别描述”是什么意思,因为你写了,并且你的新数据示例显示,数据中可以有多个匹配。当您选择与多个名称匹配的名称时,没有“ 个人描述”。
也就是说,如果您只想要一个描述,那么您真正想要的是将ComboBox
中的单个项与单个关联起来您填充ComboBox
的数据中的项目。
很遗憾,您仍然没有按要求提供完整的代码示例。因此无法知道ComboBox
是如何填充的,甚至不知道如何声明various
变量。但是你说数据被“读入一个列表”,所以让我们假设:
DataRow
代表文件中的单行文字various
被声明为List<DataRow>
ComboBox
中的项目顺序与various
列表中的项目顺序完全相同如果上述内容都是正确的(并且没有完整的代码示例,那么读取您的问题的任何人都无法确切地知道它),那么您根本不需要或者想要查询数据。 您已经知道所选项目的确切索引!
让我们进一步假设:
ComboBox
的名称是“comboBox1”,并且您的代码中有一个名为comboBox1
的字段,该字段引用了ComboBox
个实例在这种情况下,以下代码应足以替代您提供的整个代码示例:
descriptionTextBox.Text = various[comboBox1.SelectedIndex].Description();
这将检索ComboBox
中当前选择的索引,然后使用该索引(因为ComboBox
中的数据顺序应与List<DataRow>
中的完全相同})从DataRow
检索List<DataRow>
值,以便调用Description()
方法获取该行数据的实际描述并将其分配给descriptionTextBox
} Text
属性。
如果您的ComboBox
名称不同,只需使用正确的名称,而不是上面的comboBox1
。
同样,如果这不能解决您的问题,请在问题中添加详细信息。提供最小的 完整的 代码示例,并准确解释它的作用以及它与您希望发生的事情的不同之处。
答案 1 :(得分:0)
试试这个,
descriptionTextBox.Text = various[comboBox.SelectedIndex].Description();
答案 2 :(得分:0)
感谢大家的帮助,以下是对我有用的 我创建了一个方法并将组合框文本和索引输入其中。
private void ExtractData(string eventComboBo, int index)
{
var query = from v in various
where eventComboBo == v.GetName() && eventComboBox.SelectedIndex.Equals(index)
select v.Description();
foreach (var ev in query)
{
descriptionTextBox.Text = ev;
}