好的,所以我需要的是初看起来很简单的东西。我有一个带文本框的win应用程序,让我们说TextBox1。
我想根据用户在框中写的内容返回一个值,如下所示:我有100个值,带有我想要显示的相应文本。
等等。我已经在excel表中有这个对应的内容,所以我知道要显示什么,但如果条款或案例不是那么可以制作100个。
无论如何,我可以在应用程序中存储此列表,只是进行查找或其他正确的值?
编辑1:基于霍根的回复。
我创建了一个按钮并用它来创建字典并在字典中插入2个值。 我创建了另一个按钮来从字典中检索值。
仅当我添加值并在同一运行中检索它时,它才有效。如果我关闭应用程序并尝试检索字典是空的。
编辑2:Hogan的解决方案。 我宣布这本词典是公开的。
Dictionary<string, string> myLookup;
我在按钮代码中添加了字典创建:
private void button7_Click(object sender, EventArgs e)
{
myLookup = new Dictionary<string, string>();
myLookup.Add("Dan", "Text 1");
myLookup.Add("Jake", "Text 2");
}
我创建了另一个按钮来获取数据:
private void button8_Click(object sender, EventArgs e)
{
MessageBox.Show(myLookup["Dan"]);
}
如果我单击第一个按钮添加数据,然后第二个按钮检索它的工作原理。如果我关闭应用程序并重新打开,并直接单击第二个应用程序,则无效。
编辑3:我选择了外部文件,史蒂夫的解决方案。由于“无外部文件”解决方案太难以制作(要写下太多代码行)。
答案 0 :(得分:4)
听起来我正在寻找一种叫做字典的数据结构 - 就是你有一个可以查找值的密钥。
字典可以存储在DB中(作为表格),也可以存储在内存中。例如,你可以这样做:
Dictionary<string,string> myLookup = new Dictionary<string,string>();
myLookup.Add("Dan","Text 1");
myLookup.Add("Jake","Text 2");
一旦myLookup变量可用于代码,您就可以找到要通过简单查找显示的值(它就像一个数组)myLookup[TextBox1.Text]
答案 1 :(得分:0)
您从Excel文件加载数据并填写一个Dictionary对象,其中Key是您的Excel第一列,Value是Excel第二列
string excelCnString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data Source=ExcelFile.xlsx;" +
@"Extended Properties='Excel 12.0;HDR=YES;IMEX=0'";
Dictionary<string,string> dict = new Dictionary<string,string>()
using(OleDbConnection cn = new OleDbConnection(excelCnString))
using(OleDbCommand cmd1 = new OleDbCommand("SELECT * FROM [Sheet$]", cn))
{
cn.Open();
using(OleDbDataReader reader = cmd1.ExecuteReader())
{
dict.Add(reader[0].ToString(), reader[1].ToString());
}
}
现在您可以将字典简单地用作
if(dict.ContainsKey(textBox1.Text))
textBox2.Text = dict[textBox1.Text];
通过这种方式,数据在您的应用程序外部。这意味着您或您的用户可以使用Excel进行更改。在每种情况下,您都会在应用启动时阅读该数据。当然,这意味着您需要使用您的应用程序分发Excel文件,但其优点是可以随意修改文件内容。
当然,您可以提供一个更改数据的界面。在这种情况下,您还需要一种将数据保存回Excel文件的方法。
这样的事情可以完成工作
string excelCnString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data Source=ExcelFile.xlsx;" +
@"Extended Properties='Excel 12.0;HDR=YES;IMEX=0'";
using(OleDbConnection cn = new OleDbConnection(excelCnString))
using(OleDbCommand cmd1 = new OleDbCommand("UPDATE [Sheet$] SET COLUMN2 = @V1 WHERE COLUMN1 = @V2", cn))
{
cmd1.Parameters.AddWithValue("V1", string.Empty);
cmd1.Parameters.AddWithValue("V2", string.Empty);
cn.Open();
foreach(KeyValuePair<string,string> kvp in dict)
{
cmd1.Parameters["V1"] = kvp.Value;
cmd1.Parameters["V2"] = kvp.Key;
cmd1.ExecuteNonQuery();
}
}
答案 2 :(得分:0)
如果您希望此信息永久可用,我建议您将其存储在App.config中,并使用ConfigurationManager类来查找值。这实现起来相当简单。