通过 Windows 窗体应用程序查询数据后如何显示数据?

How to display data after querying it via Windows Form App?

提问人:unbeliever 提问时间:11/15/2023 更新时间:11/18/2023 访问量:36

问:

我有一个简单的 Windows 窗体应用程序,其中包含连接到我的 MariaDB 的数据网格视图。我添加了“添加条目”和“删除条目”按钮,但在添加“搜索”按钮时遇到问题。我还有六个文本框,它们代表数据库中一列的值(总共 6 列),我用它们将条目添加到网格/数据库中。我想将这些相同的文本框用于搜索功能(当我按“搜索”以显示具有该列值的所有条目时)。

这是我想出的,但最终没有奏效。我知道问题出在最后几行,我不知道如何在我的数据网格视图中显示新的数据表。提前致谢。

private void btnPretraga_Click(object sender, EventArgs e)
{
    string connString = ConfigurationManager.ConnectionStrings["MariaDBConnectionString"].ConnectionString;
    using (MySqlConnection konekcija = new MySqlConnection(connString))
    {
        konekcija.Open();
        string upit = "SELECT * FROM drvnisortiment WHERE (vrstaDrveta = @VrstaDrveta OR duzinaM = @DuzinaM OR precnikCM = @PrecnikCM OR klasa=@Klasa OR redniBrDoznake=@RedniBrDoznake OR vrstaSlUzitka=@VrstaSlUzitka)";
        using (MySqlCommand cmd = new MySqlCommand(upit, konekcija))
        {
            MySqlDataAdapter SDA = new MySqlDataAdapter(upit, connString);
            cmd.Parameters.AddWithValue("@VrstaDrveta", vrstaDrvetatextBox.Text);
            cmd.Parameters.AddWithValue("@DuzinaM", duzinaMtextBox.Text);
            cmd.Parameters.AddWithValue("@PrecnikCM", precnikCMtextBox.Text);
            cmd.Parameters.AddWithValue("@Klasa", klasatextBox.Text);
            cmd.Parameters.AddWithValue("@RedniBrDoznake", redniBrDoznaketextBox.Text);
            cmd.Parameters.AddWithValue("@VrstaSlUzitka", vrstaSlUzitkatextBox.Text);
            DataSet ds = new DataSet();
            SDA.Fill(ds, "drvnisortiment");
            drvniSortimentGridView.DataSource = ds.Tables[0];

        }
    }
}
C# mysql winforms mariadb

评论

0赞 Mikael 11/15/2023
这回答了你的问题吗?如何做一个简单的dataGridView搜索/过滤?
0赞 unbeliever 11/17/2023
@Mikael不可以,这仅适用于未连接到实际数据库的数据网格。

答:

0赞 Vector 11/18/2023 #1

此代码在包含 DataGridView 的窗体 LOADS 时运行 请考虑使用 SQLite.SQLiteDataReader

   Private Sub ViewSearches()

    Dim intID As Integer
    Dim strDate As String
    Dim strAmt As Decimal
    Dim strYear As Integer
    Dim strSM As Integer

    Dim rowCount As Integer
    Dim maxRowCount As Integer
    Dim emptyStr As String = "  "


    Using conn As New SQLiteConnection($"Data Source = '{gv_dbName}';Version=3;")

        conn.Open()

        Using cmd As New SQLiteCommand("", conn)

            If gvSearchType = "All" Then
                cmd.CommandText = "SELECT * FROM TxData"
                'cmd.Parameters.AddWithValue("$intID", intID)
                'cmd.Parameters.AddWithValue("$strDate", strDate)
                'cmd.Parameters.AddWithValue("$strAmt", strAmt)
                'cmd.Parameters.AddWithValue("$gvYear", strYear)
                'cmd.Parameters.AddWithValue("$gvSM", strSM)

            ElseIf gvSearchType = "MoRangeYr" Then
                'cmd.CommandText = "SELECT * FROM TxData"
                'cmd.CommandText = "SELECT * FROM TxData WHERE txAmount >= '1.00' OR  txAmount <= '2.00'"
                cmd.CommandText = "SELECT * FROM TxData WHERE txSearchMonth >= $gvFromMonth AND txSearchMonth <= $gvToMonth AND txYear = $gvYear "
                'cmd.CommandText = "SELECT * FROM TxData WHERE txSearchMonth BETWEEN $gvFromMonth AND $gvToMonth AND txYear = $gvYear "
                cmd.Parameters.AddWithValue("$gvFromMonth", gvFromMonth)
                cmd.Parameters.AddWithValue("$gvToMonth", gvToMonth)
                cmd.Parameters.AddWithValue("$gvYear", gvYear)
            End If


            Using rdr As SQLite.SQLiteDataReader = cmd.ExecuteReader
                'dgvTX.DataSource = rdr
                'Statement Above is when DB is bound to dgvTX
                '============================================

                While rdr.Read()
                    intID = CInt((rdr("TID")))
                    strDate = rdr("txSortDate").ToString
                    strAmt = CDec(rdr("txAmount"))
                    strYear = CInt(rdr("txYear").ToString)
                    strSM = CInt(rdr("txSearchMonth").ToString) 'was txSearchMonth

                    'dgvTX.Columns(4).DefaultCellStyle.Format = "N"

                    dgvTX.Columns(2).DefaultCellStyle.Format = "C" 'Adds the $ sign and commas
                    dgvTX.Rows.Add(intID, strDate, strAmt, strYear, strSM, emptyStr)
                    rowCount = rowCount + 1

                End While
                If rowCount <= 25 Then
                    maxRowCount = 25 - rowCount
                    For iA = 1 To maxRowCount
                        dgvTX.Rows.Add(" ")
                    Next
                End If

                'dgvTX.Columns(3).DefaultCellStyle.Format = "N"

                dgvTX.Sort(dgvTX.Columns(0), ListSortDirection.Ascending)

            End Using
        End Using
    End Using

End Sub

End 类