按下按钮更新DataGridView

时间:2013-07-23 19:10:30

标签: datagridview

这是我的第一个Windows窗体/ SQL应用程序。如何在“提交”按钮上更新数据库的表更改?

当尝试添加'dt'数据表时,它无法识别它,但我无法弄清楚如何将按钮功能放在try / catch语句中。

显然它们现在有两个功能,但我如何将它作为一个功能工作?

代码如下。

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

namespace AccountsApp
{
    public partial class Search : Form
    {
        public Search(string searchString, string searchType)
        {

            InitializeComponent();

            try
            {
                if (searchString != null)
                {
                    string strCon = "Data Source=OMIW2310.orthman.local;Initial Catalog=Accts;Integrated Security=True";
                    string strSQL = "SELECT     dbo.Account.UserName, dbo.Account.Password, dbo.Account.URL, dbo.Host.HostName, dbo.Service.ServiceName, dbo.ServiceType.SvcTypeName FROM dbo.Account INNER JOIN dbo.Host ON dbo.Account.AccountHost = dbo.Host.HostID INNER JOIN dbo.Service ON dbo.Account.AccountService = dbo.Service.ServiceID INNER JOIN dbo.ServiceType ON dbo.Account.AccountType = dbo.ServiceType.SvcTypeID WHERE " + searchType + "= '" + searchString + "'";
                    SqlDataAdapter dataAdapter = new SqlDataAdapter(strSQL, strCon);
                    SqlCommandBuilder commandbuilder = new SqlCommandBuilder(dataAdapter);
                    DataTable dt = new DataTable();
                    dataAdapter.Fill(dt);
                    dbGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
                    dbGridView.DataSource = dt;




                    textBox1.Text = searchString;
                    textBox2.Text = searchType;



                }
            } catch (SqlException ex){
                MessageBox.Show(ex.Message);
            }
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void Search_Load(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void CancelButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dbGridView.Update(); 
        }

        }
}

1 个答案:

答案 0 :(得分:1)

据我所知,您希望使用提交按钮(我认为是button1)更新数据库。以下是我对您的表单所做的更改以及代码注释中的解释:

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

namespace AccountsApp
{
    public partial class Search : Form
    {
        //make dataadapter and datatable members so they can also
        //be used by the submit button method
        private SqlDataAdapter dataAdapter;
        private DataTable dt;

        public Search(string searchString, string searchType)
        {

            InitializeComponent();

            try
            {
                if (searchString != null)
                {
                    string strCon = "Data Source=OMIW2310.orthman.local;Initial Catalog=Accts;Integrated Security=True";
                    string strSQL = "SELECT     dbo.Account.UserName, dbo.Account.Password, dbo.Account.URL, dbo.Host.HostName, dbo.Service.ServiceName, dbo.ServiceType.SvcTypeName FROM dbo.Account INNER JOIN dbo.Host ON dbo.Account.AccountHost = dbo.Host.HostID INNER JOIN dbo.Service ON dbo.Account.AccountService = dbo.Service.ServiceID INNER JOIN dbo.ServiceType ON dbo.Account.AccountType = dbo.ServiceType.SvcTypeID WHERE " + searchType + "= '" + searchString + "'";
                    dataAdapter = new SqlDataAdapter(strSQL, strCon);
                    SqlCommandBuilder commandbuilder = new SqlCommandBuilder(dataAdapter);
                    dt = new DataTable();
                    dataAdapter.Fill(dt);
                    dbGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
                    dbGridView.DataSource = dt;




                    textBox1.Text = searchString;
                    textBox2.Text = searchType;



                }
            } catch (SqlException ex){
                MessageBox.Show(ex.Message);
            }
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void Search_Load(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void CancelButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            //dbGridView.Update(); <------ this simply redraws the datagridview. 
            //Has nothing to do with data.

            //code required for the update (for the submit to work)

            //make sure the datagriview has ended editing
            dataGridView.EndEdit();

            //call update on the datatable bound to your datagrdiview
            dataAdapter.Update(dt);
        }
    }
}