当前位置:编程学习 > C#/ASP.NET >>

dataGridView 与 textBox绑定同数据源,dataGridView修改可以更新到数据库中,而textBox修改无法更新到数据库中??

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace genersoft.xmgl
{
    public partial class xm_main : Form
    {
        //定义公共变量
        mydata nData = new mydata();
        public static SqlDataAdapter sda = new SqlDataAdapter();
        public static DataSet ds = new DataSet();
        public static string myStyle = "";
        //初始控件
        public void initial()
        {
            xmDG.ReadOnly = true;
            xmDG.AllowUserToAddRows = false;//设置DG不显示添加行
            xmDG.AllowUserToDeleteRows = false;
            nData.getConn();
            string sdaSql = "select * from xmjbxx";
            sda = new SqlDataAdapter(sdaSql,nData.conn);
            sda.Fill(ds);
            xmDG.DataSource = ds.Tables[0];
            xmNameText.DataBindings.Add("Text", ds.Tables[0], "xmName");
            dqText.DataBindings.Add("Text", ds.Tables[0], "dq");
            jdText.DataBindings.Add("Text", ds.Tables[0], "jd");
            sda.Dispose();
            ds.Dispose();
        }
        //数据更新方法
        public void upDatabase(string upStyle)
        {
            string sql = "";
            switch (upStyle)
            {
                case "mody":
                    {
                        sql = "update xmjbxx set xmName=@xmName,jd=@jd,dq=@dq where xmID=@xmID";
                        break;
                    }
                case "insert":
                    {
                        sql = "insert into xmjbxx (xmName,jd,dq) values (@xmName,@jd,@dq)";
                        DataRow dr = ds.Tables[0].NewRow();
                        dr["xmName"] = xmNameText.Text.Trim();
                        dr["jd"] = jdText.Text.Trim();
                        dr["dq"] = dqText.Text.Trim();
                        ds.Tables[0].Rows.Add(dr);
                        break;
                    }
                case "delete":
                    {
                        sql = "delete from xmjbxx where xmID=@xmID";
                        int selectRow=xmDG.CurrentRow.Index;
                        ds.Tables[0].Rows[selectRow].Delete();
                        break;
                    }
                    
               }
                try
                {
                    SqlCommand sc = new SqlCommand(sql, nData.conn);
                    sc.Parameters.Add("@xmName", SqlDbType.NChar, 20, "xmName");
                    sc.Parameters.Add("@xmID", SqlDbType.Int, 4, "xmID");
                    sc.Parameters.Add("@jd", SqlDbType.NChar, 20, "jd");
                    sc.Parameters.Add("@dq", SqlDbType.NChar, 20, "dq");
                    switch (upStyle)
                    {
                        case "mody":
                            {
                                sda.UpdateCommand = sc;
                                break;
                            }
                        case "insert":
                            {
                                sda.InsertCommand = sc;
                                break;
                            }
                        case "delete":
                            {
                                sda.DeleteCommand = sc;
                                break;
                            }
                    }
                    sda.Update(ds.Tables[0]);
                    MessageBox.Show("保存成功!"+upStyle+ds.Tables[0].Rows[0]["xmID"].ToString());
                    xmxx.SelectTab("xmxx1");
                    clearControl(xmxx2, "System.Windows.Forms.TextBox");
                    xmDG.ReadOnly = true;
                    xmDG.AllowUserToAddRows = false;//设置DG不显示添加行
                    xmDG.AllowUserToDeleteRows = false;
                }
                catch (SqlException ee)
                {
                    MessageBox.Show(ee.Message);
                }
        }
       //初始化控件内TXTBOX值为空
        public void clearControl(Control myControl,string myConSty)
        {
            for (int i = 0; i <  myControl.Controls.Count; i++)
            {
                if (myControl.Controls[i].GetType().ToString().Trim() == myConSty)
                {
                    myControl.Controls[i].Text = "";
                }
            }
        }
        public xm_main()
        {
            InitializeComponent();
        }

        private void xm_main_Load(object sender, EventArgs e)
        {            
            initial();            
        }

        private void toolStripButton5_Click(object sender, EventArgs e)
        {
            xmxx.SelectTab("xmxx2");
            myStyle="insert";
            clearControl(xmxx2, "System.Windows.Forms.TextBox");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            upDatabase(myStyle);
        }

        private void toolStripButton7_Click(object sender, EventArgs e)
        {
            xmDG.ReadOnly = false;
        }

        private void toolStripButton6_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("确定要删除选定的记录?","删除",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.Yes)
            {
                upDatabase("delete");
            }
        }

        private void toolStripButton8_Click(object sender, EventArgs e)
        {
            upDatabase("mody");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            clearControl(xmxx2,"System.Windows.Forms.TextBox");           
        }

        private void xmDG_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {

        }

        private void xmDG_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            xmDG.ReadOnly = false;
            myStyle = "mody";
            xmxx.SelectTab("xmxx2");
        }
    }
}
--------------------编程问答-------------------- --------------------编程问答-------------------- TextChanged 事件里 或是 foucs 事件里去写数据库的更新语句  --------------------编程问答-------------------- 与事件无关吧?我是点击按钮进行数据更新的... --------------------编程问答-------------------- 问题找到:
必需终止现在编辑状态(BindingContext)后,数据集才会接受更新,这样绑定TEXTBOX才能同部更新到数据库sda.UpdateCommand = sc;
this.BindingContext[ds.Tables[0]].EndCurrentEdit(); --------------------编程问答-------------------- 在focus事件里写语句吧。失去焦点时触发事件
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,