我是C#的新手,需要一些帮助。我想从csv(分号分隔)数据库导入一个包含三列的表。然后我想遍历表的所有行,获取具有“值”的所有行,然后根据“值”显示某些复选框或多种可选按钮。我不知道如何做到这一点,所以我刚开始尝试从数据库导入数据。这是我的代码:
class Nettstasjoner
{
public string NS { get; set; }
public string Sek { get; set; }
public string Radial { get; set; }
public string Value { get; set; }
Value = "H812"; //this will be set from a button later
static void Main(string[] args)
{
IEnumerable<string> strCSV =
File.ReadLines(@"C:\Users\thomoe\Desktop\SMSvarsel\nsdatabase.csv");
var results = from str in strCSV
let tmp = str.Split(';')
select new
{
NS = tmp[0],
Sek = tmp[1],
Radial = tmp[2]
};
foreach (var tmp in results)
{
//here I need to select all rows with the Value value in it and make a checkbox or something with the captin from the row NS(tmp[0]).
}
}
}
我对其他方式非常开放,包括MVVM,我刚刚尝试使用谷歌搜索等等。现在我被卡住了。非常感谢您的帮助,请在回答时非常具体;)我对C#的理解仍然非常渺茫:)
答案 0 :(得分:0)
您已拥有一组数据。
首先,通过显式类decloration使您的集合更像“对象”:
protected void Button1_Click(object sender, EventArgs e)
{
GridView1.DataSource = db.contacts.ToList();
GridView1.DataBind();
}
并将您的代码更改为
public class MyModel
{
public string NS { get; set; }
public string Sek { get; set; }
public string Radial { get; set; }
}
接下来,您需要在视图中使用item containers之一,例如ListBox或https://msdn.microsoft.com/en-us/library/system.windows.controls.listview(v=vs.110).aspx,并使用自定义template,其中会显示一个复选框以及其他任何内容模特课。
最后,您需要使用binding将您的集合从ViewModel绑定到ListView。
这还没有完成解决方案,但我希望它能帮助你理解主要原则。
答案 1 :(得分:0)
您必须使用 TextFieldParser
TextFieldParser parser = new TextFieldParser(@"C:\Users\thomoe\Desktop\SMSvarsel\nsdatabase.csv");
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(";");
List<MyStruct> myData = new List<MysTruct>();
while (!parser.EndOfData)
{
//Process row
string[] fields = parser.ReadFields();
myData.Add(new MyStruct()
{
NS = fields[0],
Sek = fields[1],
Radial = fields[2]
});
}
现在您将拥有数据对象列表; 你可以用很多方式做到这一点,但我会这样做: 创建你自己的控件,如子窗口,在该控件中,你将有一个网格,你可以根据需要创建行和列,并将你的按钮/复选框等放在你的参数,或者当然在你的窗口创建一些网格和制作它在window.cs中