使用sql查询在运行时在datatable中添加行

时间:2014-09-20 13:26:55

标签: c# winforms sql-server-2008 datagridview datatable

我的winform应用程序上有Textbox1,dataGridView和Button。 场景是:按下按钮时,SQL Query基于在文本框中输入的值运行。并且此查询提取的数据插入到dataGridview(dataTable)中。直到这里,我的代码正在运行。 但是当我在文本框中键入其他值并按下按钮时,它将替换dataGridview(dataTable)中的记录。 我希望每当我在文本框中键入一些值并按下按钮时,应该在dataGridview(dataTable)中添加row()。它不应取代以前添加的数据。 这是我的代码:我需要满足要求,新添加的数据不应取代以前的数据。 提前致谢。 

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {

            SqlConnection con = new SqlConnection(@"Data Source=AFZAL\SQLEXPRESS;Initial Catalog=GIMS_LabInfo;Integrated Security=True");
            con.Open();
            SqlCommand sc = new SqlCommand("select Profcode, Profname, Profcharges, Profduedate from Profnames$ Where Profname = '"+comboBox1.Text+"'", con);
            SqlDataAdapter sda = new SqlDataAdapter(sc);

            DataTable ds = new DataTable();

                 sda.Fill(ds);
            dataGridView2.DataSource = ds;

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

3 个答案:

答案 0 :(得分:0)

在您的代码中,您没有任何命令可以将TextBox中的值添加到DataGridView。添加值的代码应该是这样的:

dataGridView1.Rows [0] .Cells [0] .Value = textBox1.Text;

答案 1 :(得分:0)

你应该有一个全局变量,它包含各种查询在你的网格中加载的行,它用于将其内容绑定到DataGridView。

DataTable currentData = null;

然后,在第一次查询之后,使用DataTable.Copy方法复制查询返回的表和数据,并将此currentData绑定到数据网格。 下一个查询使用LoadDataRow方法

将提取的行添加到currentData表中
private void button1_Click(object sender, EventArgs e)
{
    try
    {
        using(SqlConnection con = new SqlConnection(....))
        using(SqlCommand sc = new SqlCommand(@"select Profcode, Profname, Profcharges,  
                                     Profduedate from Profnames$ 
                                     Where Profname =  @name", con))
        {
            con.Open();
            cmd.Parameters.AddWithValue("@name",comboBox1.Text);
            SqlDataAdapter sda = new SqlDataAdapter(sc);

            DataTable ds = new DataTable();
            sda.Fill(ds);

            if(currentData == null)
            {
                currentData = ds.Copy();
                dataGridView2.DataSource = currentData;
            }
            else
            {
                currentData.BeginLoadData();
                foreach(DataRow row in ds.Rows)
                   currentData.LoadDataRow(row.ItemArray, true);
                currentData.EndLoadData();

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

另请注意,我在构建命令文本时删除了字符串连接,而是使用参数化查询。而且using语句确保正确关闭和处理使用的命令和连接。

答案 2 :(得分:0)

我认为您希望在网格视图中插入数据源之前清除数据网格视图。 所以在你的按钮上点击首先执行此操作

dataGridView1.DataSource = null;