【问题标题】:Issue while showing result of a query from database to DataGridView显示从数据库到 DataGridView 的查询结果时出现问题
【发布时间】:2020-11-01 17:48:42
【问题描述】:

在这里进行分配时,我可以查看从数据库到网格视图的所有数据,但数据似乎是 unsorted 并且它显示了我只想在 DataGridView 代码中显示的所有数据 display the result of a query 我有试过的是:

private void btnmeritbsit_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(dbpath);
    string query = "select Applicant_no,A_Name,Father_Name,T_Matric,O_Matric,M_Percentage,T_Inter ,O_Inter ,I_Percentage from applicantinfo order by I_Percentage desc";
    con.Open();
    dataGridView1.ColumnCount = sdr.FieldCount;
    SqlCommand cmd = new SqlCommand(query, con);
    SqlDataReader sdr = cmd.ExecuteReader();
             
    while (sdr.Read())
    {
        dataGridView1.Rows.Add(sdr["Applicant_no"], sdr["A_Name"], sdr["Father_Name"], sdr["T_Matric"], sdr["O_Matric"], sdr["M_Percentage"], sdr["T_Inter"], sdr["O_Inter"], sdr["I_Percentage"]);
    }
    con.Close();
}

我通过datatabledataAdapter 获得了全部价值,但没有任何效果!!卡住了!!

// DataTable dtbl = new DataTable();
// sda.Fill(dtbl);
// dataGridView1.DataSource = dtbl;

【问题讨论】:

  • 我通过 datatable 和 dataAdapter 获取整个值,这将是正常的方式。更改为 datareader 时(为什么?)您需要更多代码。你有,但所有的顺序都错了。再看一遍:为什么在打开连接之前执行 ExecuteReader,为什么在之后立即关闭以及为什么在循环之外添加行?也可以将datatable和reader.Load结合起来实现数据绑定。
  • 问题的根本原因是您的查询缺少 WHERE 子句。将数据集添加到您的项目,在其中配置一个带有参数化 where 子句的 tableadapter,然后将网格的表示拖出数据源窗口并拖到您的表单上,这将在 0 行 c# 代码和一个 SQL 中解决所有问题,由你。目前我没有足够的时间将其写成答案,但您可以查看 stackoverflow.com/questions/62543864/… 中的项目符号列表
  • @CaiusJard 你能解释一下吗
  • @TaW 你会通过在我的代码中添加一些编辑来告诉我吗?
  • 将 con.Open 向上移动一行,在循环之后将 con.close 和 rows.add 移动到循环中。报告结果..!更多更改:您需要自己添加列,可能像这样:dataGridView1.ColumnCount = sdr.FieldCount; 或一一添加。您还需要像这样访问数据:`dataGridView1.Rows.Add(sdr["Applicant_no"], sdr["A_Name"], .....);`

标签: c# sql winforms datagridview


【解决方案1】:

我在另一个答案中写的图片。这是使用 VB 应用程序,但没关系,因为步骤相同,而且您实际上不会编写超过一行代码

右键项目,添加新数据集

右键表面,添加tableadapter

添加连接字符串,下一步。命名,下一步

添加一个从表中选择所有内容的查询,WHERE (id column) = @id

重命名方法以添加“ByID”。为什么稍后会很明显。完成:

右键表适配器,添加查询

继续选择“返回行的选择”并输入按姓氏查找用户的查询:

给新方法起个好名字。结束。保存:

转到表单设计器,确保数据源工具面板正在显示(查看菜单)

将用户网格节点从数据源拖到表单上

它已经为 ID 预先制作了一个文本框,因为这是 tableadapter 中的第一个查询。我们将其更改为姓氏。单击按钮,更改其名称,更改其显示的文本。始终确保您的控件名称是最新且相关的。

你可以看到我也改变了标签,我也改变了文本框的名称(你看不到它),我改变了设计器下托盘中所有内容的名称,所以它以下划线开头:

我这样做是因为 VB 不区分大小写,并且在任何语言中调用与其类型同名的变量都是一个坏主意,并且会使 VB 中的智能感知混乱。您不必在 C# 中添加前导下划线。仅区分大小写就足够了,尽管可以说并不总是明智的:

现在我们需要更改代码。双击 FillBy 按钮。它进入代码。也许你已经有一些代码,也许没有。确保代码使用相关输入填充表格。这是该过程中唯一真正需要您考虑自己在做什么以及您的变量被称为什么的部分(它们可能与我的不同)

代码可能默认为说

_usersTableAdapter.FillByID(_myDataSet.Users, new Guid(_lastNameToolStripTextBox.Text));

因为它曾经设置为让您在该框中键入一个 id(guid 或 int,我的 db 有一个 guid),但我们已将其更改为姓氏。所以我们需要更改 FillByID(现在你明白为什么我们给它们起合理的名称,而不是 FillBy1 和 FillBy2)所以它是 FillByLastName,我们需要更改代码以便我们传递一个字符串 lastname,而不是一个 guid ID

_usersTableAdapter.FillByLastName(_myDataSet.Users, _lastNameToolStripTextBox.Text);

这是您必须编写的唯一代码。 记住我在表单上使用前导下划线命名我的东西,所以我的代码有前导下划线。如果你不重命名你的东西,你的代码不会有前导下划线

现在运行应用程序:

看看那些约翰史密斯!当然,他们是不同的用户——每个人的 ID 都不同。您甚至可以在此处写入新的详细信息,然后按保存以更新数据库..

从一行代码! :)

【讨论】:

    【解决方案2】:

    只需进行一些更改,就可以正常工作:)

    private void btnmeritbscs_Click(object sender, EventArgs e)
            {
               
                string dbpath = @"Data Source=DESKTOP-UMA0VFO;Initial Catalog=ApplicationForm;Integrated Security=True";
                SqlConnection con = new SqlConnection(dbpath);
                string query = "select prgstatus,Applicant_no,A_Name,Father_Name,T_Matric,O_Matric,M_Percentage,T_Inter ,O_Inter ,I_Percentage from applicantinfo where prgstatus like 'bscs' order by I_Percentage desc";
                SqlCommand cmd = new SqlCommand(query, con);  
                con.Open();
                SqlDataReader sdr = cmd.ExecuteReader();
                dataGridView1.ColumnCount = sdr.FieldCount;
    
    
                while (sdr.Read())
                {
                    dataGridView1.Rows.Add(sdr["prgstatus"], sdr["Applicant_no"], sdr["A_Name"], sdr["Father_Name"], sdr["T_Matric"], sdr["O_Matric"], sdr["M_Percentage"], sdr["T_Inter"], sdr["O_Inter"], sdr["I_Percentage"]);
                }
                con.Close();
    
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 2011-10-10
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多