从数据库生成WPF中的复选框或可选择按钮

时间:2015-12-23 11:17:44

标签: c# wpf linq mvvm

我是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#的理解仍然非常渺茫:)

2 个答案:

答案 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之一,例如ListBoxhttps://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中