【问题标题】:C# All rows from MySQL query not going into datagridviewC# MySQL 查询中的所有行都不会进入 datagridview
【发布时间】:2013-10-24 22:47:21
【问题描述】:

我试图用 MySql 查询的结果填充 DataGridView,但它们并没有全部进入。这是我的代码:

try
{
                conn.Open();
                player_search = new MySqlCommand("SELECT * FROM admin;", conn);
                reader = player_search.ExecuteReader();

                int counter = 0;
                while (reader.Read())
                {

                        player_list[0, counter].Value = reader.GetString(0);
                        player_list[1, counter].Value = reader.GetString(1);
                        player_list[2, counter].Value = reader.GetString(6);
                        player_list[3, counter].Value = reader.GetString(7);
                        player_list[4, counter].Value = reader.GetString(8);
                        player_list[5, counter].Value = reader.GetString(9);
                        player_list[6, counter].Value = "Remove";

                        counter = counter+1;

                }
            }

但是它并没有全部进去。它只插入查询的第一行?为什么要这样做?我没有收到任何错误?

【问题讨论】:

  • 您有错误吗?你正在尝试,但没有抓住?也许有一个例外。如果有,是什么?
  • 不,完全没有错误! :( 我添加了断点,我看到它循环遍历所有应该返回的数据,但它似乎没有出现在 DataGridView 中?:S

标签: c# mysql sql datagridview


【解决方案1】:

解决了!我不得不做一个冗长的方法,但它有效!

MySqlCommand mysqlcmd = new MySqlCommand("SELECT * FROM admin;", conn);
            MySqlDataAdapter mysqlad = new MySqlDataAdapter(mysqlcmd);
            DataSet ds = new DataSet();
            mysqlad.Fill(ds);
            DataTable dt = ds.Tables[0];
            player_list.DataSource = dt;
            int rowIndex = 0;
            foreach (DataRow row in dt.Rows)
            {
                int i = 0;

                foreach (var item in row.ItemArray)
                {
                    if (i == 0) {
                        player_list[0, rowIndex].Value = item.ToString();
                    }
                    if (i == 1) {
                        player_list[1, rowIndex].Value = item.ToString();
                    }
                    if (i == 4)
                    {
                        player_list[2, rowIndex].Value = item.ToString();
                    }
                    if (i == 7)
                    {
                        player_list[3, rowIndex].Value = item.ToString();
                    }
                    if (i == 8)
                    {
                        player_list[4, rowIndex].Value = item.ToString();
                    }
                    if (i == 9)
                    {
                        player_list[5, rowIndex].Value = item.ToString();
                    }
                    player_list[6, rowIndex].Value = "Remove";
                    ++i;
                }
                ++rowIndex;
                i = 0;
            }

【讨论】:

    【解决方案2】:

    我建议你尝试使用 DataSet 来获取它:

    public DataTable GetDBDataTable(MySqlConnection dbconnection, string table, string columns = "*", string clause = "")
        {
            MySqlCommand mysqlcmd = new MySqlCommand("SELECT " + columns + " FROM " + table + " " + clause +";", dbconnection);
            MySqlDataAdapter mysqlad = new MySqlDataAdapter(mysqlcmd);
            DataSet ds = new DataSet();
            mysqlad.Fill(ds);
            DataTable dt = ds.Tables[0];
            return dt;
        }
    
     UPDATE:     player_list.DataSource(GetDBDataTable(...));
                 player_list.DataBind();
    

    【讨论】:

    • 这在一定程度上有效。它添加了正确数量的行但不输入数据?
    • 试试 dt.Rows[i].ItemArray[0].ToString(),看看 i 从 0 到 rows.Count() 的结果
    • 希望对您有所帮助 ;) player_list 是 DataGridView 吗?在这种情况下,请查找我的更新
    • 是的,你在上面看到我的帖子时指出了我的方向:)
    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    相关资源
    最近更新 更多