【问题标题】:Search in C# bringing back multiple rows - datagrid view在 C# 中搜索带回多行 - 数据网格视图
【发布时间】:2014-03-03 09:51:06
【问题描述】:

好的,所以我有一个函数可以根据数字在数据库中搜索记录,然后将其显示在数据网格中,这曾经可以正常工作,但由于某种原因,当我前段时间复制代码时,它现在会带来一个回溯数据库中的每一列(使用正确的数据)。例如,第 1 行将仅在数据网格中显示一行,但仅显示第一列,然后第二行将具有前两列,依此类推....

这是我的代码

        dataGridView1.DataSource = null;
        dataGridView1.Rows.Clear();
        dataGridView1.Refresh();

        string strprovider = @"BLANKED OUT INFO HERE";
        string strsql = "Select * from OCR where OCR like '" + textBox4.Text + "%'";

        OleDbConnection newConn = new OleDbConnection(strprovider);
        OleDbCommand dbCmd = new OleDbCommand(strsql, newConn);

        newConn.Open();
        dbCmd.CommandType = CommandType.Text;
        OleDbDataReader dr = dbCmd.ExecuteReader();


        if (textBox4.Text == "")
        {
            MessageBox.Show("Please Enter a Valid OCR Number", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        }

        else
        {

            if (dr.HasRows)
            {
                // ....
            }
            else
            {
                MessageBox.Show("No Record Found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            int columncount = dr.FieldCount;
            string[] rowdata = new string[columncount];
            while (dr.Read())
            {
                for (int k = 0; k < columncount; k++)
                {

                    switch (dr.GetFieldType(k).ToString())
                    {
                        case "System.Int32":
                            rowdata[k] = dr.GetInt32(k).ToString();
                            break;

                        case "System.DateTime":
                            rowdata[k] = dr.GetDateTime(k).ToString();
                            break;

                        case "System.String":
                            rowdata[k] = dr.GetString(k);
                            break;
                    }

                    dataGridView1.Rows.Add(rowdata);
                }

            }

        }

    }

【问题讨论】:

    标签: c# sql datagridview duplicates rows


    【解决方案1】:

    尝试在你的 for 循环之后添加你的行:

            while (dr.Read())
            {
                for (int k = 0; k < columncount; k++)
                {
    
                    switch (dr.GetFieldType(k).ToString())
                    {
                        case "System.Int32":
                            rowdata[k] = dr.GetInt32(k).ToString();
                            break;
    
                        case "System.DateTime":
                            rowdata[k] = dr.GetDateTime(k).ToString();
                            break;
    
                        case "System.String":
                            rowdata[k] = dr.GetString(k);
                            break;
                    }
    
                    //dataGridView1.Rows.Add(rowdata); <= This shouldn't be here
                }
              //Add row after loop completes all columns
              dataGridView1.Rows.Add(rowdata);
            }
    

    【讨论】:

    • 是的,谢谢,知道它会这么小! :)
    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 2017-12-04
    • 2012-04-22
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多