【问题标题】:Pass a value if a checkbox is checked如果选中复选框,则传递一个值
【发布时间】:2011-05-23 11:54:27
【问题描述】:

我有一个表单,其中有一些文本框 (45),每个文本框旁边都有 CheckBoxes,还有一个按钮。当按下按钮时,我想将每个具有选中 CheckBox 的文本框的值传递给另一个类中的 void,而未选中的文本框传递一个空值。

我现在拥有的是: Form1

private void button_Click(object sender, EventArgs e)
{
String Value1;
if (value1CheckBox.Checked)
{
    Value1 = value1TextBox.Text;
}
else
{
    Value1 = null;
}

String Value2;
if (value2CheckBox.Checked)
{
    Value2 = value1TextBox.Text;
}
else
{
    Value2 = null;
}

etc...

Form2 form2 = new Form2();
form2.insertSQL(Value1, Value2, etc...);
}

Form2

private void insertSQL(String Value1, String Value2, String etc...)
{
    /*
    Code to insert to SQL database
    */
}

但是这种接缝非常低效,如果选中这些框,我相信一定有更好的方法来传递值。任何关于更好方法的建议都将不胜感激,如果我使用了错误的术语,我也很抱歉,我对编程很陌生。

【问题讨论】:

  • 您可以创建一个复选框数组,其中包含您拥有的所有复选框,然后您可以循环该数组或将数组传递给其他表单

标签: c# checkbox


【解决方案1】:

一个好主意是将所有复选框和文本框存储到字典中。您需要创建的特定字典是:

字典 checkToText = new Dictionary();

然后,将每个 CheckBox/TextBox 对映射到字典中。

最后,在 button_Clicked 方法中,创建一个循环,遍历字典中的每个键/值对:

foreach (KeyValuePair<CheckBox, TextBox> pair in checkToText)
{
//do what you need to do
//pair.Key for checkbox
//pair.Value for textbox
}

【讨论】:

  • 谢谢,我花了一段时间才弄清楚如何做到这一点,但一旦我开始做,我就会发现它很简单,而且剂量正是我想要的。
【解决方案2】:

我认为您遇到的限制是未选中的复选框不会作为表单帖子的一部分传递。

您可以组装一个 javascript,在点击时将组装一些 JSON 并将其放入隐藏值,然后从隐藏值(在您的服务器代码中)反序列化 JSON。这将允许您为文本框设置 null,而无需遍历服务器端的表单字段。

可维护性将成为您决定是将其放到服务器端还是在客户端执行的驱动力,就像我已经描述的那样。

另外,不要忘记在创建 SQL 之前清理数据(正如您的服务器端函数名称所暗示的那样)。你不能相信这些数据!

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    相关资源
    最近更新 更多