【问题标题】:Generate checkboxes in or selectable buttons in WPF from database从数据库中生成 WPF 中的复选框或可选按钮
【发布时间】:2015-12-23 11:17:43
【问题描述】:

我是 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# 的理解仍然很薄 :)

【问题讨论】:

    标签: c# wpf linq mvvm


    【解决方案1】:

    您已经有一个数据集合。

    首先,通过显式的类修饰让你的集合更“像对象”:

    public class MyModel
    {
        public string NS { get; set; }
        public string Sek { get; set; }
        public string Radial { get; set; }
    }
    

    并将您的代码更改为

    select new MyModel
    {
        NS = tmp[0],
        Sek = tmp[1],
        Radial = tmp[2]
    };
    

    接下来,您需要在您的视图中使用item containers 之一,例如ListBoxhttps://msdn.microsoft.com/en-us/library/system.windows.controls.listview(v=vs.110).aspx 与您的自定义template,这将显示一个复选框和您的模型类的任何其他内容。

    最后,您需要使用binding 将您的集合从 ViewModel 绑定到 ListView。

    这不是完整的解决方案,但我希望它能帮助您理解主要原理。

    【讨论】:

      【解决方案2】:

      你必须使用 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中

      【讨论】:

      • OP 没有使用TextFieldParser 类,但这可能比尝试使用String.Split 直接解析CSV 更好。跨度>
      • 他当然不是,但如果他只使用 csv 而不使用 xsl、xml、json 等其他格式,那将是一个好方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多