请允许我澄清我的情况和方法。
我有一个包含10列的Excel文件。前五列包含构成查询条件的数据,而最后五列包含构成结果的数据。
我正在尝试在数据库或excel中创建包含此数据的软件 (如果数据库很难)将链接前五列 到列表或菜单或目前五个不同组中的RadioButtons。 进行选择并按下SUBMIT按钮时,结果 将显示为excel或匹配行中的五个数据 数据库中。
这就是我想要实现的目标。
如果我的方法有误,请评论。提前感谢所有帖子。
--------------------------原始问题------------------- ---------
我在WPF上有5个groupbox(1个有5个radiobuttons,2个有3个,3个有4个,5个有4个)。 根据从每个groupBox中选择的radiobutton,软件预计将输出四个参数(来自CSV或数据库)
我使用过King {King}给出的How do I get which radio button is checked from a groupbox?代码,并修改它以用于我的目的。
var checkedRadio = new []{groupBox1, groupBox2, groupBox3, groupBox4, groupBox5}.SelectMany(g=>g.Controls.OfType<RadioButton>().Where(r=>r.Checked));
foreach(var c in checkedRadio)
MessageBox.Show(c.Name);
这给了我一个接一个选择的无线电按钮作为消息框。
我要感谢King King和其他许多人(超过20人),他们对各种答案的回答帮助我达到了这一点。
我遇到的问题是如何使用foreach循环将值分配给五个单独的int,然后使用它来计算最终的int值,我可以将其分配给我想要显示的各种结果。
我尝试在每个CheckedChanged事件处理程序中为int赋值,但是所有这些都是私有的void并且没有返回任何内容。我试图改变它们以返回整数但我似乎无法破解那个坚果。
我确信我的整个方法在这里可能是错的,但我对此并不太了解。
//我基本上想要的是在g =五个组中提供选项,并根据这五个组中的选择(excel中的列),显示数据库中匹配行中4个相应列的结果。我目前的方法是一种解决方法,因为我不知道使用数据库.//
答案 0 :(得分:0)
我认为你应该省略为五个分开的 int
分配值,但计算结果值。例如,让我们按位编码groupBox
,并计算位掩码
groupBox1 - 00001 (let it be checked)
groupBox2 - 00010
groupBox3 - 00100 (let it be checked)
groupBox4 - 01000 (let it be checked)
groupBox5 - 10000
-----------------
mask 01101 (13)
因此,如果groupBox1
,groupBox3
和groupBox4
被检查,那么最终的掩码将为01101
var result = new [] {groupBox1, groupBox2, groupBox3, groupBox4, groupBox5}
.Select((box, index) => new {
box = box,
mask = 1 << index
})
.Where(item => item.box.Controls
.OfType<RadioButton>()
.Any(button => button.Checked))
.Sum(item => item.mask);
如果你必须使用任意权重将它们组织成集合,例如,数组
double[] weights = new double[] {1.2, 3.58, 4.62, -1.7, 0.9};
double result = new [] {groupBox1, groupBox2, groupBox3, groupBox4, groupBox5}
.Select((box, index) => new {
box = box,
weight = weights[index]
}
.Where(item => item.box.Controls
.OfType<RadioButton>()
.Any(button => button.Checked))
.Sum(item => item.weight);
指导原则保持不变:不要使用分隔值:因为控件(groupboxes)有集合,所以将相应的值放入集合中以及
答案 1 :(得分:0)
很抱歉,但是这个单独的收藏很丑陋。您应该根据具有int的复选框创建用户控件,或者使用控件的标记。您可以将组框作为控件,将计算抽象到表单,但这取决于您对它们执行的操作。
public class MyClass : CheckBox
{
public int MyValue { get; set; }
public MyClass()
{
}
}
或者只是使用:
value = (int)myCheckBox.Tag;