如何将值从选定字段(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
};
如何为每个文本框实现每个字段?
答案 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"));