上午。
问题:
我有一个名为Reports的课程。两个构造函数。一个不允许参数,另一个是字符串数组。字符串数组应该是他们想要显示的报告。我想做的是以下几点:
string strSQL = this.Queries[strReportName];
我觉得这是可能的,因为在我正在使用的dataGridView中,我得到了列索引:
int nColumnIndex = dgvParts.Columns[strColumnName].Index;
这两个示例都使用字符串来确定它们检索的数组中的值,但我不确定如何执行此操作。谁能给我一些帮助?任何和所有的帮助表示赞赏。
编辑和mods:是的,报告部分与我关于动态加载DLL的其他帖子松散地联系,但我想保持另一个开放。我的老板和我决定短期,我们只有一个DLL,一切都是硬编码的,但从长远来看,我们希望动态地删除DLL作为报告,所以请不要将其标记为重复。我计划本周末试图在另一个线程中实现给我的方法。感谢。
编辑 - 问题的第2部分:好的,这是我现在的课程:
public class Queries
{
#region Report Queries
#region Missing Code
string strMissingCode = "SELECT * FROM PARTS WHERE CODE IS NULL OR CODE = ''";
#endregion
#endregion
}
我想把它改成这样的东西:
public class Queries : Dictionary<string, string>
{
}
但我不希望他们必须使用构造函数来实例化它。我想要静态排序,所以我可以运行这样的代码:
class Reports
{
private List<ReportRecord> _lstRecrods = new List<ReportRecord>();
public List<ReportRecord> Records { get { return _lstRecords; } }
public Reports(string[] strDisplayedReports)
{
foreach (string strReportTitle in strDisplayedReports)
{
this.BuildReportList(strReportTitle);
}
}
private void BuildReportList(string strReportTitle)
{
using (DataSet ds = Database.GetDataSet(Queries[strReportTitle]))
{
...
}
}
}
如何将其静态排序到我不必实例化查询的位置?谢谢你们和男孩们。
答案 0 :(得分:14)
我认为您正在寻找以下内容:
public class Reports
{
System.Collections.Generic.IDictionary<string,string> queries;
public string this[string key]
{
get
{
return this.queries[key];
}
}
}
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa288464(VS.71).aspx。
如果您不需要在Reports类中添加任何其他功能,那么只需像其他人发布的那样使用词典。
答案 1 :(得分:10)
Dictionary可以使用字符串作为“索引”(实际上是键)。
答案 2 :(得分:2)
查看Dictionary和iDictionary
答案 3 :(得分:0)
this.Queries.SingleOrDefault(x =&gt; x.Name == strReportName)不起作用?如果没有,您可以创建一个扩展方法,将该代码隐藏在索引器[]
中答案 4 :(得分:0)
您可以使用Array.IndexOf(this.Queries,strReportName);
答案 5 :(得分:-2)
c#中的基本数组是基于索引的,不能使用字符串访问器。
这有效:
string[] someArray = {"query 1", "query 2"};
string myQuery = someArray[1];
这不是:
myQuery = someArray["some value"];
使用Dictionary类,它允许任何类型的键,包括复杂类型。