从LINQ到文本框的多个字段

时间:2012-11-02 16:56:42

标签: c# winforms linq

如何将值从选定字段(LINQ)传递到winforms中的文本框?

如果是单个字段,我就是这样做的

   var result = from row in dtValueBranch.AsEnumerable()
                         where row.Field<int>("branchID") == idBranch
                         select row.Field<string>("branchName");

        StringBuilder sb = new StringBuilder();

        foreach (string s in result)
        {
            sb.Append(s + Environment.NewLine);
        }

        tbBranch.Text = sb.ToString();

所以这是许多领域的代码LINQ

    var result = from row in dtValueBranch.AsEnumerable()
                 where row.Field<int>("branchID") == idBranch
                 select new
                 {
                      BranchName = row["branchName"].ToString(),
                      branchTel = row["branchTel1"].ToString(),
                      // And many more fields

                 };

如何为每个文本框实现每个字段?

2 个答案:

答案 0 :(得分:3)

请记住,您的结果查询可能有多行,您的问题似乎集中在如何访问一行的字段上。你可以这样做:

var row = result.First();  // select first row of results

textbox1.Value = row.BranchName;
textbox2.Value = row.branchTel;
// etc..

查询中的select new语法在结果枚举中创建匿名类型。您不能按名称引用该类型,但如果使用var声明样式并让编译器进行类型推理,则可以创建局部变量(如行)。

如果你想将所有行中一个字段的所有值塞进一个文本框(如第一个代码示例中所示),你可以这样做:

    StringBuilder sbBranch = new StringBuilder();
    StringBuilder sbBranchTel = new StringBuilder();
    // etc

    foreach (var row in result)
    {
        sbBranch.Append(row.BranchName);
        sbBranch.Append(Environment.NewLine);
        sbBranchTel.Append(row.branchTel);
        sbBranchTel.Append(Environment.NewLine);
        // etc
    }

    tbBranch.Text = sbBranch.ToString();
    tbBranchTel.Text = sbBranchTel.ToString();
    // etc

但是,如果您想要显示多行数据的多行,您可能需要查看使用数据网格控件而不是一群文本框。你会节省很多精力,你的用户也可能会感谢你。

答案 1 :(得分:1)

你可以这样做:

var rows = dtValueBranch.AsEnumerable()
                        .Where(row => row.Field<int>("branchID") == idBranch);

textBox1.Value = string.Join(Environment.NewLine, 
                           rows.Select(row => row.Field<string>("branchName"));

textBox2.Value = string.Join(Environment.NewLine, 
                           rows.Select(row => row.Field<string>("branchTel1"));