【问题标题】:C# Showing all rows from a database table to DataGridC# 将数据库表中的所有行显示到 DataGrid
【发布时间】:2013-07-27 01:45:49
【问题描述】:

我一直在寻找有关如何 显示表格中的多行或所有行。很多例子我 发现让我很难正确执行它 因为数据库连接和查询字符串..

我使用自己的数据库类和预制查询功能。所以在我的表格中我有这个:

userInfo = searchBox.Text;
string dateResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "date", "username", userInfo, true);
string ipResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "ip", "username", userInfo, true);
string userResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "username", "username", userInfo, true);
string hwidResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "hwid", "username", userInfo, true);
string pcResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "pcname", "username", userInfo, true);

(userInfo 是一个包含正在搜索的名称(表)的文本框。)

获取该格式数据的函数如下:

public string GetColumnData(ValueType valueType, string tableName, string col, string colTwo, string equalsVal, bool compare)
    {
        MySqlConnection connection = null;
        MySqlDataReader dataReader = null;
        string colData = "";
        try
        {
            string query = "";
            if (compare)
                query = "SELECT `" + col + "` FROM `" + tableName + "` WHERE `" + colTwo + "`='" + equalsVal + "';";
            else
                query = "SELECT `" + col + "` FROM `" + tableName + "`";
            using (connection = new MySqlConnection(Hash.RunDecryption()))
            {
                using (MySqlCommand command = new MySqlCommand(query, connection))
                {
                    connection.Open();
                    command.CommandText = query;
                    using (dataReader = command.ExecuteReader())
                    {
                        while (dataReader.Read())
                        {
                            switch (valueType)
                            {
                                case ValueType.VALUETYPE_STRING:
                                    colData = dataReader.GetString(0);
                                    break;

                                case ValueType.VALUETYPE_INT16:
                                    colData = dataReader.GetInt16(0).ToString();
                                    break;

                                case ValueType.VALUETYPE_INT32:
                                    colData = dataReader.GetInt32(0).ToString();
                                    break;

                                case ValueType.VALUETYPE_INT64:
                                    colData = dataReader.GetInt64(0).ToString();
                                    break;
                            }
                        }

                        if (dataReader.NextResult())
                        {
                            colData = "";
                            while (dataReader.Read())
                            {
                                switch (valueType)
                                {
                                    case ValueType.VALUETYPE_STRING:
                                        colData = dataReader.GetString(0);
                                        break;

                                    case ValueType.VALUETYPE_INT16:
                                        colData = dataReader.GetInt16(0).ToString();
                                        break;

                                    case ValueType.VALUETYPE_INT32:
                                        colData = dataReader.GetInt32(0).ToString();
                                        break;

                                    case ValueType.VALUETYPE_INT64:
                                        colData = dataReader.GetInt64(0).ToString();
                                        break;
                                }
                            }
                        }
                    }
                }
            }
        }
        catch
        {
            System.Windows.Forms.MessageBox.Show("Failed to retrieve data!", "Error!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
            dataReader.Close();
            CloseConnection(connection);
        }
        finally
        {
            dataReader.Close();
            CloseConnection(connection);
        }
        return colData;
    }

现在已经解释过了,我要做的是显示所选表中的每一行 从下到上,或按日期排序(一列显示日期/时间)

我已经将我的列添加到 DataGrid,它们是:日期、ip、uid、hid、pname。

与我在数据库表中的格式相同。

谁能帮助我提供一个如何正确执行此操作的示例?

【问题讨论】:

  • 需要更多信息。你是如何执行查询的?结果存储在什么地方?如果您正在填充 DataTable,这似乎很简单,但听起来您正在使用某种自定义对象?
  • 我编辑了我的问题并添加了我用来从数据库中获取数据的查询功能。结果在上面保存信息的字符串中

标签: c# mysql database datagrid


【解决方案1】:

只需在查询字符串的末尾添加:

ORDER BY date DESC

【讨论】:

  • 这很有帮助,尽管我仍在寻找如何将所有行打印到 datagrid 而不仅仅是最后一行
  • 您的查询是正确的,如果您指定的条件满足多行,它将打印所有行。直接在MySQL上执行,查看这个查询返回了多少行
【解决方案2】:

使用 Ado.net,您也可以在客户端上处理数据。如果您的表不是太大,您可以将其内容加载到 Datatable 中。然后,您可以使用 DataView 或 Datatable 功能来选择特定的行。 Datatable 可以像 DB 引擎一样使用过滤器执行选择。查看 MSDN 上的 ado.net 数据表对象参考

【讨论】:

  • 使用 DataTable 很麻烦,因为它需要您使用 SqlCommand,它不能从我用于全局功能的数据库类中直接执行。使用其中的单个查询很烦人。我只是想找到一个简单的 Fill 示例,说明我如何使用我的 db 类
  • 好的设计是抽象你的命令对象等,甚至是数据库对象。然后,您连接到什么数据库都没有关系。而且我仍然不明白 DataTable 是如何需要 SqlCommand 的。它可能是 IDataAdapter.Fill...
【解决方案3】:

我终于想出了一个使用它的方法,我不知道为什么我以前没有尝试过这个..

我的整个问题只是试图打开连接以便打印数据。 结束了这项工作:

userInfo = searchBox.Text;

        MySqlConnection connection = null;
        string query = "SELECT * FROM " + userInfo + " ORDER BY date DESC;";
        userGrid.Rows.Clear(); 

        using (connection = new MySqlConnection(Hash.RunDecryption()))
        {
            using (MySqlCommand command = new MySqlCommand(query, connection))
            {
                connection.Open();
                userGrid.DataSource = null;
                DataSet dt = new DataSet();
                MySqlDataAdapter da = new MySqlDataAdapter(command);
                da.Fill(dt);
                userGrid.DataSource = dt.Tables[0];
                connection.Close();
            }
        }

感谢所有提供帮助的人,尤其是按日期排序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    相关资源
    最近更新 更多