如何读多个combobox和textbox,形成字符串?

cowleyking 2008-08-07 05:35:58
在panel中有多个combobox和textbox
如何按照顺序读出各个控件的text,形成字符串?
注:combobox和textbox的个数不定,是动态添加的。
如:第一行第一个combobox为列名,第二个combobox为“>,<,=”等,接着是一个textbox,第三个combobox为“或,与,非”;
如此循环,问如何形成sql语句?
...全文
119 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZengHD 2008-08-07
  • 打赏
  • 举报
回复
        private void button1_Click(object sender, EventArgs e)
{
ComboBox newCbBox1 = new ComboBox();
newCbBox1.Size = new Size(121, 20);
newCbBox1.Location = new Point(comboBox6.Location.X, comboBox6.Location.Y + 30 * i);
newCbBox1.DataSource = dtSource;
newCbBox1.DisplayMember = "name";
newCbBox1.Name = "MyControl0";
this.panel1.Controls.Add(newCbBox1);

ComboBox newCbBox2 = new ComboBox();
newCbBox2.Size = new Size(69, 20);
newCbBox2.Location = new Point(comboBox8.Location.X, comboBox8.Location.Y + 30 * i);
newCbBox2.Items.AddRange(new object[] {
"等于",
"大于",
"小于",
"大于等于",
"小于等于",
"不等于"});
newCbBox2.Name = "MyControl1";
this.panel1.Controls.Add(newCbBox2);

for (int i = 0; i < panel1.Controls.Count; i++)
{
Control[] c = panel1.Controls.Find("MyControl"+i.ToString(),false);
if (c.Length > 0)
{
if (c[0].GetType().Name == "ComboBox" || c[0].GetType().Name == "TextBox")
{
MessageBox.Show(c[0].Text);
}
}
}
}
cowleyking 2008-08-07
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
newCbBox1.Size = new Size(121, 20);
newCbBox1.Location = new Point(comboBox6.Location.X, comboBox6.Location.Y + 30 * i);
newCbBox1.DataSource = dtSource;
newCbBox1.DisplayMember = "name";
this.panel1.Controls.Add(newCbBox1);

ComboBox newCbBox2 = new ComboBox();
newCbBox2.Size = new Size(69, 20);
newCbBox2.Location = new Point(comboBox8.Location.X, comboBox8.Location.Y + 30 * i);
newCbBox2.Items.AddRange(new object[] {
"等于",
"大于",
"小于",
"大于等于",
"小于等于",
"不等于"});
this.panel1.Controls.Add(newCbBox2);
}
谢谢楼上的各位,上面是我的动态添加代码,没有设置Name属性。每点击一次按钮就添加几个控件,麻烦各位帮我看看。
另外,哪位有空的话,讲讲Tag属性,呵呵
bwangel 2008-08-07
  • 打赏
  • 举报
回复
你在动态添加控件时设定了他们的Name属性吗?
ZengHD 2008-08-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cowleyking 的回复:]
这样只是取出其中各个的Text,可以保证他们是有序的吗?
[/Quote]

动态生成控件时,按你的需要的顺序生成控件:MyControl0,MyControl1,MyControl2,MyControl3
for (int i = 0; i < 4; i++)
{
Control[] c = panel1.Controls.Find("MyControl"+i.ToString(),false);
if (c.Length > 0)
{
if (c[0].GetType().Name == "ComboBox" || c[0].GetType().Name == "TextBox")
{
MessageBox.Show(c[0].Text);
}
}
}
chuizhu 2008-08-07
  • 打赏
  • 举报
回复
string s="";
for (int iCount = 0; iCount < panel.Controls.Count; iCount++)
{
if (panel.Controls[iCount] is Combobox)
{
Combobox combbox = panel.Controls[iCount] as Combobox;
s+=combbox.Text;
}
else if(panel.Controls[iCount] is TextBox)
{
TextBox textBox=panel.Controls[iCount] as TextBox;
s+=textBox.Text;
}
}

循环得出panel下的子控件,然后得出子控件内的信息。如果想区分Combobox,可以在动态创建Combobox控件时,设定它们的Tag属性,循环时判断Tag的值即可。最后可根据你自己的想法给s赋值。
cowleyking 2008-08-07
  • 打赏
  • 举报
回复
有没有办法可以设定读控件的顺序,就像TabIndex那样
bwangel 2008-08-07
  • 打赏
  • 举报
回复
既然是动态添加的,那你添加的时候就应该考虑到如何取值了.

比如,很简单地,各个控件添加的时候名字就应该起得有规律了, 这样,才能在取值的时候很方便地用FindControl()找到它.
cowleyking 2008-08-07
  • 打赏
  • 举报
回复
这样只是取出其中各个的Text,可以保证他们是有序的吗?
ChargeForward 2008-08-07
  • 打赏
  • 举报
回复
mark
ZengHD 2008-08-07
  • 打赏
  • 举报
回复
foreach (Control c in panel1.Controls)
{
if (c.GetType().Name == "ComboBox" || c.GetType().Name == "TextBox")
{
MessageBox.Show(c.Text);
}
}
cowleyking 2008-08-07
  • 打赏
  • 举报
回复
应该是如何形成sql语句where以后的内容

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧