从数据库中查询数据并显示到datagridview中的两种方法

第一种方法:利用SqlDataAdapter的Fill()方法,

                     优点:可以不用考虑数据库表中每一列的数据类型,将数据一次性导入到表中;

                     缺点:不能在查询过程中编辑查询的数据

string sql = "select ordernumber,materialscode,productname,materialsquantity from OrderDetails where ordernumber = @ordernumber";
SqlParameter[] pms = new SqlParameter[] { 
new SqlParameter("@ordernumber",SqlDbType.Int){Value= this.txtordernumber.Text.Trim()}
}; 

public static DataTable ExecuteDataTable(string sql,params SqlParameter [] pms)
 {
     DataTable dt = new DataTable();
     //dt = null;
     using (SqlDataAdapter sda = new SqlDataAdapter(sql,constr))
      {
           if (pms != null)
           {
               sda.SelectCommand.Parameters.AddRange(pms);
           }
           sda.Fill(dt);
       }
       return dt;
         
  }
dt = SQLHelper.ExecuteDataTable(sql,pms);

  第二种方法:先创建一个类,类的属性包含所有需要查询的数据库表中的列名,然后再创建一个List<类类型>集合,利用SqlDataReader 将表中的数据逐行读取保存到list集合中,最后将list集合赋值给datagridview的datasouce.

优点:可以在查询过程中,编辑所查询出的数据;

缺点:需要考虑数据库表中每一列的数据类型和所创建的类的属性数据类型保持一致,至少能够自动转换。有时如果表中的列的数据类型是float,类中该列的属性必须需设置为double才能转换,否则该列数据查询时会出现异常,float和double精度不一样。

 

 private List<OrderSchedule> GetOrderScheduleValue()
 {
    List<OrderSchedule> list = new List<OrderSchedule>();
    string sql = "select orderstartdate,ordernumber,orderstatus,orderfinishdate from OrderSchedule where orderstartdate = @orderstartdate";
    SqlParameter[] pms = new SqlParameter[]{
    new SqlParameter("@orderstartdate",SqlDbType.Date){Value = dtpOrderDate.Text.Trim()}
     };
     using (SqlDataReader Reader = SQLHelper.ExecuteReader(sql, pms))
     {
        if (Reader.HasRows)
        {
            while (Reader.Read())
            {
                OrderSchedule ObjOrderSchedule = new OrderSchedule();
                       
                ObjOrderSchedule.orderdate = (Reader.GetDateTime(0).ToString()).Substring(0,10);
                ObjOrderSchedule.ordernumber = Reader.GetString(1);
                        
                if (Reader.GetBoolean(2))
                {
                    ObjOrderSchedule.orderstatus = "已完成";   
                }
                else
                {
                    ObjOrderSchedule.orderstatus = "没完成";
                }
                        
                if (Reader.IsDBNull(3))//如果查询到一行的orderfinisheddate列中字段为null
	        {
		   ObjOrderSchedule.orderfinisheddate = ""; 
	        }
                else
                {
                    ObjOrderSchedule.orderfinisheddate = (Reader.GetDateTime(3).ToString()).Substring(0, 10);
                }                     
                    list.Add(ObjOrderSchedule);

             }
           }
        }
        return list;
     }
 List<OrderSchedule> objOrderSchedule = GetOrderScheduleValue();
 dgvFrmCheckList.DataSource = objOrderSchedule;

    

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DataGridView的删除操作可以分为两个步骤:从DataGridView删除数据行和从数据库删除对应的记录。下面介绍如何在删除DataGridView数据行的同时,将对应的记录从数据库删除,并更新DataGridView显示数据。 1. 删除DataGridView数据行 在DataGridView删除数据行的方式有很多种,这里介绍其一种常用的方式,即通过选需要删除的行,然后点击“删除”按钮或者按下“Delete”键来删除数据行。 ```csharp private void buttonDelete_Click(object sender, EventArgs e) { // 获取选的行 DataGridViewSelectedRowCollection selectedRows = dataGridView1.SelectedRows; // 遍历选的行并删除 foreach (DataGridViewRow row in selectedRows) { dataGridView1.Rows.Remove(row); } } ``` 上述代码,我们通过SelectedRows属性获取选的行,然后通过Remove()方法删除选的行。 2. 从数据库删除对应的记录 在删除DataGridView数据行后,我们需要从数据库删除对应的记录。具体的实现方式与数据库的类型和使用的数据访问技术有关。这里以SQL Server数据库和ADO.NET数据访问技术为例。 ```csharp private void buttonDelete_Click(object sender, EventArgs e) { // 获取选的行 DataGridViewSelectedRowCollection selectedRows = dataGridView1.SelectedRows; // 遍历选的行并删除 foreach (DataGridViewRow row in selectedRows) { // 获取要删除的记录的ID值 string id = row.Cells["ID"].Value.ToString(); // 删除数据库对应的记录 string sql = "DELETE FROM Table1 WHERE ID = @ID"; using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@ID", id); conn.Open(); cmd.ExecuteNonQuery(); } } // 从DataGridView删除选的行 dataGridView1.Rows.Remove(row); } } ``` 上述代码,我们首先获取选的行,然后遍历选的行并删除。在删除每一行数据之前,我们需要获取要删除的记录的ID值,然后使用SQL语句从数据库删除对应的记录。最后,我们从DataGridView删除选的行。 3. 更新DataGridView显示数据 在从数据库删除记录后,我们需要更新DataGridView显示数据,以保证数据的一致性。具体的实现方式也与数据库的类型和使用的数据访问技术有关。这里以SQL Server数据库和ADO.NET数据访问技术为例。 ```csharp private void buttonDelete_Click(object sender, EventArgs e) { // 获取选的行 DataGridViewSelectedRowCollection selectedRows = dataGridView1.SelectedRows; // 遍历选的行并删除 foreach (DataGridViewRow row in selectedRows) { // 获取要删除的记录的ID值 string id = row.Cells["ID"].Value.ToString(); // 删除数据库对应的记录 string sql = "DELETE FROM Table1 WHERE ID = @ID"; using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@ID", id); conn.Open(); cmd.ExecuteNonQuery(); } } // 从DataGridView删除选的行 dataGridView1.Rows.Remove(row); } // 重新绑定DataGridView显示数据 string sql2 = "SELECT * FROM Table1"; using (SqlDataAdapter adapter = new SqlDataAdapter(sql2, connStr)) { DataTable dt = new DataTable(); adapter.Fill(dt); dataGridView1.DataSource = dt; } } ``` 上述代码,我们在从数据库删除记录后,重新从数据库获取最新的数据,并将其绑定到DataGridView,以更新DataGridView显示数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值