繁体   English   中英

插入文本框时刷新Datagridview,详细信息行

[英]Refresh Datagridview, detail row when inserting in textbox

我有一个datagridview和一个文本框。 当用户在文本框中输入一些字母时,我希望对datagridview进行排序并将结果显示为文本框的文本。 但是,如果用户未在文本框中键入任何内容或清除文本框中的内容,则希望datagridview显示我的数据库的所有结果。 实际上,我已经在两周前取得了成功,但是我进行了一些更改,现在它不再起作用了。

这是我的代码:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        SqlConnection maConnexion = new SqlConnection("Server= localhost; Database= Seica_Takaya;Integrated Security = SSPI; ");
        maConnexion.Open();
        string Var1 = textBox1.Text;
        SqlCommand command = maConnexion.CreateCommand();
        SqlCommand command1 = maConnexion.CreateCommand();

        if (Program.UserType == "admin")
        {
            if (textBox1.Text != String.Empty)
            {
                command.Parameters.AddWithValue("@SerialNum", Var1 + "%");
                command1.Parameters.AddWithValue("@SerialNum", Var1 + "%");
                command.CommandText = "SELECT Message, FComponent, ReadValue, ValueReference, FaultCodeByOp, RepairingTime FROM FailAndPass WHERE SerialNum LIKE @SerialNum AND FComponent IS NOT NULL";
                command1.CommandText = "SELECT Machine, BoardName, BoardNumber FROM FailAndPass WHERE SerialNum LIKE @SerialNum And FComponent IS NOT NULL";
            }
        }
        else
        {
            if (textBox1.Text != String.Empty)
            {
                command.Parameters.AddWithValue("@SerialNum", Var1 + "%");
                command1.Parameters.AddWithValue("@SerialNum", Var1 + "%");
                command.CommandText = "SELECT Message, FComponent, ReadValue, ValueReference, FaultCodeByOp, RepairingTime FROM FailAndPass WHERE  (SerialNum LIKE @SerialNum) AND ReportingOperator IS NULL AND FComponent IS NOT NULL  ";
                command1.CommandText = "SELECT DISTINCT SerialNum, Machine, BoardName, BoardNumber FROM FailAndPass WHERE  ReportingOperator IS NULL AND FComponent IS NOT NULL AND (SerialNum LIKE @SerialNum) ";
            }
        }

        if (!string.IsNullOrWhiteSpace(textBox1.Text))
        {
            SqlDataAdapter sda = new SqlDataAdapter(command);
            SqlDataAdapter sda1 = new SqlDataAdapter(command1);
            DataTable dt = new DataTable();
            DataTable dt1 = new DataTable();
            sda.Fill(dt);
            sda1.Fill(dt1);

            DataColumn dcIsDirty = new DataColumn("IsDirty", typeof(bool));
            DataColumn dcIsDirty1 = new DataColumn("IsDirty", typeof(bool));
            dcIsDirty.DefaultValue = false;
            dcIsDirty1.DefaultValue = false;
            dt.Columns.Add(dcIsDirty);
            dt1.Columns.Add(dcIsDirty1);

            dataGridView1.DataSource = dt;
            dataGridView2.DataSource = dt1;
            maConnexion.Close();

            dataGridView1.Columns[6].Visible = false;
            dataGridView2.Columns[3].Visible = false;

        }
    }

正如您将看到的,datagridview已填充,用户可以编辑列,并通过单击按钮在数据库中写入新数据。 但是,如果用户在文本框中写了一个serialNum,它只会显示一个结果..并非所有以B0033开头的结果都为例。

如注释中所述,您不想在每次文本更改时都重新查询。 我写了一些代码来帮助您入门。 您将不得不将其转换为应用程序的代码。

// Put this to the event or sub where you want to query for data
 Private DataGridView dgv;
 Private DataView _tblView;
 private void Form1_Load(object sender, EventArgs e) {
        DataTable tbl = myModule.GetDataTableWithRows();
        //  Imagine we have Columns "CutomerID", "CustomerLastName", "CustomerPriority"
        _tblView = new DataView(tbl);
        _tblView.RowFilter = "";
        dgv.DataSource = _tblView;
    }

然后你的TextChangedEvent

 private void txtChanged(object sender, EventArgs e) {
        _tblView.RowFilter = ("CustomerLastName like \'" + (mytextBox.Text + "\'"));
    }

这样,您的应用程序将执行过滤。

行过滤器也有通配符,我认为任何字符的%% 有关更多信息,请查看DataView MSDN。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM