在一个窗体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

解决方案 »

  1.   

    还用第二个问题,希望知道的大大帮我看看:
    http://topic.csdn.net/u/20100515/11/9483ed6c-c560-494a-8d4d-473614fcb80d.html
      

  2.   

    先贴上你button1是如何实现保存的
      

  3.   

    直接从控件上把TextBox控件的值获取出来然后保存就可以了这里面就涉及到一个窗体传值问题,因为你的控件和Form1可能不在一起
      

  4.   

    WinForm窗体传值WinForm窗体传值
    了解了窗体的显示相关知识,接着总结一下窗体的传值方法: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; 
    }
      

  5.   

    Form1.cs:
    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);            
            }
    }
      

  6.   

    我的用户控件UserControl1中有几十,上百的值,都要传过来那也太长了吧?还有没有其它的方法啊?
      

  7.   

    考虑一下这个原因:
    是不是你修改后,焦点一失去,会导致textbox控件的值,重新绑定为数据库的原始值?这样你保存时,取得就是原来的值了?
      

  8.   

    下面这段代码是删除功能的
    如果没有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();
      

  9.   

    update set 要修改的值="@要修改的值" from 数据库的表名
    where id="@id"
    然后用sqlcommand的ExecuteNonQuery()方法有可能你在修改的时候没有指明ID
      

  10.   

    晕倒,这跟数据库操作没关系吧?
    这样吧,我把问题改 一下:
    在一个窗体Form1中tabControl1 ,button1, 运行后,tabControl1加载一个用户控件UserControl1,
    这个UserControl1中有很多的TextBox控件,比如textBox1的初始值为a(初始值,就是我把控件放到窗体上时,指定其什为a),textbox2的初始值为b,textbox3的初始值为c,..........  
    当我修改这些TextBox的值后,按Form1 上的button1保存时,保存的还是原来的初始值,
    我想保存TextBox修改后的值,这要怎么做啊?大家帮帮我!!!
    补充一点这个保存按钮button1是一定要放在Form1上的。
      

  11.   

    那怎么可能,你在修改文本框后,textbox_leave事件中messagebox.show(textbox1.text),看看内容修改了吗?
      

  12.   

    这样可以得到textbox1改变后的值,但是其它的textbox的值就得不到了???
     
    其实如果我把保存按钮button1放到UserControl1中,是可以得到修改后的值的,
    但是放到窗体Form1上就是得不到修改后的值,不知道怎么回事???
      

  13.   

    UserControl1里提供一个方法读取里面的每一个textbox值
    如果你嫌字符串太长,你可以把它放在一个动太数组里返回using System.Collections;Public ArrayList ReadAllText()
    {
       ArrayList ary=new ArrayList();
       foreach( TextBoxt tb in this.Controls)
       {
           ary.Add(tb.Text);
       } 
       return ary; 
    }
    外面再调用这个usercontrol11.ReadAllText()可以得到所有字串,再接起来存到数据库
      

  14.   


    从UserControl1里读取到的每一个textbox值,它们始终是最开始的初始值,我不是要这初始值,我要的是修改后的值。。就是在这些textbox的值修改后,存储这些修改的值。。