zoukankan      html  css  js  c++  java
  • Winform开发中如何将数据库字段绑定到ComboBox控件

    最近开始自己动手写一个财务分析软件,由于自己也是刚学.Net不久,所以自己写的的时候遇到了很多问题,希望通过博客把一些印象深刻的问题记录下来。

    Winform开发中如何将数据库字段绑定到ComboBox控件

    1.问题引入

    在开发中用到了ComboBox控件,也就是实现下拉选择功能的控件。但是选项的 数据并不是固定的,而是要根据数据库中的某一列进行动态的调整。

    2.解决思路

    这里我大概考虑了两种情况,一种是下拉列表的选择项是项目中的实体类某一属性,或者项目其他要用到该属性对应的数据库主键。

    这种情况主要是把实体对象通过SqlDataReader方法读取并封装到集合中,然后再绑定数据。

    而我这里的情况是只需要显示对应的属性就好,使用的是SqlDataAdapter方法读取数据 ,然后在控件所在窗体初始化的时候把数据绑定。

    3.参考代码

    第一种情况:

    SQLHelper类中的代码:

     1 public static SqlDataReader GetReader(string sql)
     2     {
     3         SqlConnection conn = new SqlConnection(connString);
     4         SqlCommand cmd = new SqlCommand(sql, conn);
     5         try
     6         {
     7             conn.Open();
     8             return cmd.ExecuteReader(CommandBehavior.CloseConnection);
     9         }
    10         catch (Exception ex)
    11         {
    12             conn.Close();
    13             //将错误信息写入日志...
    14 
    15             throw ex;
    16         }
    17     }

    封装到集合中:

     1 public List<StudentClass> GetAllClasses()
     2     {
     3         string sql = "select ClassName,ClassId from StudentClass";
     4         SqlDataReader objReader = SQLHelper.GetReader(sql);
     5         List<StudentClass> list = new List<StudentClass>();
     6         while (objReader.Read())
     7         {
     8             list.Add(new StudentClass()
     9             {
    10                 ClassId = Convert.ToInt32(objReader["ClassId"]),
    11                 ClassName = objReader["ClassName"].ToString()
    12             });
    13         }
    14         objReader.Close();
    15         return list;
    16     }

    然后在窗体初始化方法里面调用并绑定数据:

     1  private StudentClassService objClassService = new StudentClassService();
     2 
     3     public FrmAddStudent()
     4     {
     5         InitializeComponent();
     6         //初始化班级下拉框
     7         this.cboClassName.DataSource = objClassService.GetAllClasses();
     8         this.cboClassName.DisplayMember = "ClassName";
     9         this.cboClassName.ValueMember = "ClassId";
    10 
    11     }

    第二种情况:

    SQLHelper类中的代码:

    1  public static DataSet GetDataSet(string sql)
    2     {
    3         SqlConnection conn = new SqlConnection(connString);
    4         //SqlCommand cmd = new SqlCommand(sql, conn);
    5         SqlDataAdapter da = new SqlDataAdapter(sql, conn);
    6         DataSet ds = new DataSet();
    7         da.Fill(ds);
    8         return ds;
    9     }

    然后在窗体初始化方法里面调用并绑定数据:

     1 public partial class FrmVoucherQuery : Form
     2 {
     3     public FrmVoucherQuery()
     4     {
     5         InitializeComponent();
     6         string sql = string.Format("Select FName From t_VoucherGroup Order by FGroupID");
     7         //控件名.DataSource=数据集.数据表
     8         cbVoucherName.DataSource = SQLHelper.GetDataSet(sql).Tables[0];
     9         cbVoucherName.DisplayMember = "FName";
    10         cbVoucherName.ValueMember = "FName";
    11     }
    12 }
  • 相关阅读:
    Pikachu漏洞练习平台实验——SQL注入(四)
    ELMO,BERT和GPT简介
    Self-Attention 和 Transformer
    Seq2Seq和Attention机制入门介绍
    循环神经网络(RNN)入门介绍
    XGBoost的推导和说明
    在Azure DevOps Server中运行基于Spring Boot和Consul的微服务项目单元测试
    Azure DevOps Server(TFS) 客户端分析
    传统码头建设企业:Azure DevOps Server 流水线技术沟通
    ItelliJ Idea 2019提交TFVC变更,系统提示Validation must be performed before checking in
  • 原文地址:https://www.cnblogs.com/xtualong/p/8094398.html
Copyright © 2011-2022 走看看