在一个窗体Form1中tabControl1 ,button1, 运行后,tabControl1加载一个用户控件UserControl1,
这个UserControl1中有很多的TextBox控件,比如textBox1,textbox2,textbox3,..........
这些TextBox的值是从数据库中读取,当我修改这些TextBox的值后,按Form1 上的button1保存时,保存的还是原来的值,
我想保存TextBox修改后的值,这要怎么做啊?大家帮帮我!!!
补充一点这个保存按钮button1是一定要放在Form1上的。还用第二个问题,希望知道的大大帮我看看:
http://topic.csdn.net/u/20100515/11/9483ed6c-c560-494a-8d4d-473614fcb80d.html
这个UserControl1中有很多的TextBox控件,比如textBox1,textbox2,textbox3,..........
这些TextBox的值是从数据库中读取,当我修改这些TextBox的值后,按Form1 上的button1保存时,保存的还是原来的值,
我想保存TextBox修改后的值,这要怎么做啊?大家帮帮我!!!
补充一点这个保存按钮button1是一定要放在Form1上的。还用第二个问题,希望知道的大大帮我看看:
http://topic.csdn.net/u/20100515/11/9483ed6c-c560-494a-8d4d-473614fcb80d.html
http://topic.csdn.net/u/20100515/11/9483ed6c-c560-494a-8d4d-473614fcb80d.html
了解了窗体的显示相关知识,接着总结一下窗体的传值方法:1.通过构造函数
特点:传值是单向的(不可以互相传值),实现简单
实现代码如下:
在窗体Form2中
int value1;
string value2;public Form2 ( int value1 , string value2 )
{
InitializeComponent ( ); this.value1 = value1;
this.value2 = value2;
}在窗体Form1中这样调用
new Form2 ( 111 , "222" ).Show ( ); //这样就把111,"222",这2个值传送给了Form2 2.通过静态变量
特点:传值是双向的,实现简单
实现代码如下:
在一个app类中定义一个静态成员value
public class app
{
public static string value;
}在窗体Form1中这样调用
app.value = "f2"; //给静态成员赋值
new Form2 ( ).Show ( ); //显示Form2在窗体Form2中
this.Text = app.value; //取回app.value的值
app.value = "Form2"; //给app.value赋值,以便其他窗体调用 3.通过窗体的公有属性值
特点:实现简单
实现代码如下:在窗体Form2中定义一个公有属性Form2Value,获取和设置textBox1的文本值
public string Form2Value
{
get
{
return this.textBox1.Text;
}
set
{
this.textBox1.Text = value;
}
}在窗体Form1中这样调用
Form2 f2 = new Form2 ( );
f2.Form2Value = "Ok"; //给Form2的textBox1赋值Ok
f2.ShowDialog ( ); 4.通过窗体的公有属性值和Owner属性
特点:实现简单,灵活
实现代码如下:
在窗体Form1中
public int Form1Value = 1;Form2 f2 = new Form2 ( );
f2.ShowDialog ( this ); //把Form1作为Form2的所有者传递给Form2在窗体Form2中
//Form2的所有者是Form1
Form1 f1 = ( Form1 ) this.Owner;
//取到Form1的值是1
MessageBox.Show ( f1.Form1Value .ToString ( ) );
//给Form1的Form1Value赋值222
f1.Form1Value = 222; 5.通过窗体的公有属性值和Application.OpenForms属性
说明:Application.OpenForms属性:获取属于应用程序的打开窗体的集合。(此属性在 .NET Framework2.0版中)
实现代码如下:
在窗体Form1中
public int Form1Value = 1;Form2 f2 = new Form2 ( );
f2.Show ( );在窗体Form2中
string formName = "Form1";
Form fr = Application.OpenForms [ formName ];if ( fr != null )
{
Form1 f1 = ( Form1 ) fr;
//取到Form1的值是1
MessageBox.Show ( f1.Form1Value.ToString ( ) );
//给Form1的Form1Value赋值222
f1.Form1Value = 222;
} 6.通过事件
实现代码如下:
在窗体Form2中定义公有属性Form2Value,获取和设置textBox1的文本值
并且还定义一个accept事件
public string Form2Value
{
get
{
return this.textBox1.Text;
}
set
{
this.textBox1.Text = value;
}
}public event EventHandler accept;
private void button1_Click ( object sender , EventArgs e )
{
if ( accept != null )
{
accept ( this , EventArgs.Empty ); //当窗体触发事件,传递自身引用
}
}在窗体Form1中
Form2 f2 = new Form2 ( );
f2.accept += new EventHandler ( f2_accept );
f2.Show ( );void f2_accept ( object sender , EventArgs e )
{
//事件的接收者通过一个简单的类型转换得到Form2的引用
Form2 f2 = (Form2) sender;
//接收到Form2的textBox1.Text
this.textBox1.Text = f2.Form2Value;
}
private void button1_Click(object sender, EventArgs e)
{
UserControl1 us=new UserControl1();
us.SaveValue();
}UserControl1.cs:
public void SaveValue() //保存
{
string xTime = txtTime.Text.ToString();
string xName=txtName.Text;
......
new SetOtherXmlClass().WriteToXml(xTime,xName);
}
}
是不是你修改后,焦点一失去,会导致textbox控件的值,重新绑定为数据库的原始值?这样你保存时,取得就是原来的值了?
如果没有myCommand.ExecuteNonQuery();这句,就会在数据库中删不掉,所以你是不是没有执行更改操作导致在数据库中没保存修改操作哟
SqlConnection myConnection = new SqlConnection();
string qury = "delete from df where Id=@Id";
SqlCommand myCommand = new SqlCommand(qury, myConnection);
myConnection.Open();
DataSet ds = new DataSet();
myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 10));
myCommand.Parameters["@Id"].Value = textBox1.Text;
try
{
myCommand.ExecuteNonQuery();
}
catch (SqlException ex)
{
MessageBox.Show("删除数据错误!" + ex.Message.ToString());
}
myCommand.Clone();
myConnection.Close();
where id="@id"
然后用sqlcommand的ExecuteNonQuery()方法有可能你在修改的时候没有指明ID
这样吧,我把问题改 一下:
在一个窗体Form1中tabControl1 ,button1, 运行后,tabControl1加载一个用户控件UserControl1,
这个UserControl1中有很多的TextBox控件,比如textBox1的初始值为a(初始值,就是我把控件放到窗体上时,指定其什为a),textbox2的初始值为b,textbox3的初始值为c,..........
当我修改这些TextBox的值后,按Form1 上的button1保存时,保存的还是原来的初始值,
我想保存TextBox修改后的值,这要怎么做啊?大家帮帮我!!!
补充一点这个保存按钮button1是一定要放在Form1上的。
其实如果我把保存按钮button1放到UserControl1中,是可以得到修改后的值的,
但是放到窗体Form1上就是得不到修改后的值,不知道怎么回事???
如果你嫌字符串太长,你可以把它放在一个动太数组里返回using System.Collections;Public ArrayList ReadAllText()
{
ArrayList ary=new ArrayList();
foreach( TextBoxt tb in this.Controls)
{
ary.Add(tb.Text);
}
return ary;
}
外面再调用这个usercontrol11.ReadAllText()可以得到所有字串,再接起来存到数据库
从UserControl1里读取到的每一个textbox值,它们始终是最开始的初始值,我不是要这初始值,我要的是修改后的值。。就是在这些textbox的值修改后,存储这些修改的值。。