C# Web控件与数据感应之 ListControl 类

目录

关于数据感应

ListControl 类类型控件

范例运行环境

数据感应通用方法

设计

实现

调用示例

数据源

调用

小结


关于数据感应

数据感应也即数据捆绑,是一种动态的,Web控件与数据源之间的交互,诸如 System.Web.UI.WebControls 里的 DropDownList控件、ListBox控件,又如 System.Web.UI.HtmlControls 中的 HtmlSelect控件,均可以与数据源进行捆绑并显示。用于数据感应的数据源有多种,本文将主要介绍与数据库提取数据并捆绑控件为例,讲解C#创建一些通用方法,如何捆绑数据源到 ListControl 类类型控件上。

ListControl 类类型控件

在这里我们以 System.Web.UI.WebControls.DropDownList 控件为例,其表示允许用户从下拉列表中选择单个项的控件,包括显示的值(ListItem.Text)和存储的值(ListItem.Value),类似的还有 ListBox控件,在这里我们统称为 ListControl 类类型控件,只是它们的 UI 呈现和显示方式不同而已。

范例运行环境

操作系统: Windows Server 2019 DataCenter

.net版本: .netFramework4.7.1 或以上

开发工具:VS2019  C#

数据提取:在这里我们以能够支持 Oracle 9i、MS SQL Server 2016、国产达梦数据 8 的通用数据库内容提取方法为例, 生成数据源需要利用 ADO.NET 中的数据提供者对象包括IDbConnection、IDbCommand、IDbDataParameter等,如何使用这些对象请参考我的文章:

《C#实现 IDbConnection / IDbCommand 等相关通用数据接口》

数据感应通用方法

设计

simpleDataList 方法可以下达SQL命令及配置相关参数,将数据源感应到指定的 ListControl 类控件上,其参数说明如下表:

序号参数名类型说明
1DbServerTypestring目前支持 "oracle"、 "dm8",其它字符串均视为 MS SQL Server
2strConnstring对应数据库的连接字符串
3sqlstring要执行的SQL语句命令行
4parasArrayList

要赋值的参数对象,逐个添加到ArrayList里,请注意参数为实体数据参数对象,如 MS SQL Server ,请传递如下代码:

ArrayList.Add(new SqlParameter("参数名",参数值)); 

5keyfieldstring

提取数据源成功时,用于捆绑ListItem.Value 的字段名

6displayfieldstring提取数据源成功时,用于捆绑ListItem.Text 的字段名
7_objectSystem.Web.UI.WebControls.ListControl要捆绑的目标 ListControl 对象
8allownullbool是否允许添加一个空项,指捆绑成功后是否还需要添加一个空项,该空项会自动增加到第一个选项(如Value为空,Text 显示为 “未选择” ),且处于默认选择状态,否则会自动默认为数据源的第一个选项
9allownullvaluestring当允许添加一个空项时(allownull为true),指定空项存储的 Value 值
10allownulltextstring当允许添加一个空项时(allownull为true),指定空项存储的 Text 值

实现

simpleDataList 方法完整代码如下:

public void simpleDataList(string DbServerType,string strConn,string sql,ArrayList paras,string keyfield,string displayfield,System.Web.UI.WebControls.ListControl _object,bool allownull,string allownullvalue,string allownulltext)
{
			
			System.Data.IDbConnection Conn=GetConnection(DbServerType,strConn);
			System.Data.IDbCommand Cmd=GetCommand(DbServerType,sql,paras,Conn);

			System.Data.IDataReader myDr=GetDataReader(DbServerType);
			try
			{
				Conn.Open();
                if (DbServerType.ToLower() == "dm8")
                {
                    myDr = Cmd.ExecuteReader() as DmDataReader;
                }
                else
                {
                    myDr = Cmd.ExecuteReader();
                }
				_object.DataSource = myDr;
				_object.DataTextField = displayfield;
				_object.DataValueField = keyfield;
				_object.DataBind();

				myDr.Close();

			}
			catch (SqlException)
			{
			}
			finally
			{
				Conn.Close();
				Conn.Dispose();
			}
			if(allownull)
			{
				_object.Items.Insert (0,new ListItem(allownulltext,allownullvalue));
			}
}//simpleDataList


public System.Data.IDbConnection GetConnection(string DbServerType,string ConnectionString)
{
			IDbConnection con = null;
			switch (DbServerType.ToLower())
			{
				case "oracle":
					con = new OracleConnection(ConnectionString);break;
                case "dm8":
                    con = new DmConnection(ConnectionString); break;
                default:
					con = new SqlConnection(ConnectionString);   break;
			}
			return con;

}
public IDbCommand GetCommand(string dbservertype,string cmdText,ArrayList paras,IDbConnection con)
{
			IDbCommand cmd = null;
			switch (dbservertype.ToLower())
			{
				case "oracle": cmd = new OracleCommand(cmdText,(OracleConnection)con);
					break;
                case "dm8":
                    cmd = new DmCommand(cmdText, (DmConnection)con);
                    break;
                default:    cmd = new SqlCommand(cmdText,(SqlConnection)con);        break;
			}
			if(paras!=null)
			{
				for(int i=0;i<paras.Count;i++)
				{
					cmd.Parameters.Add(GetParameter(dbservertype,paras[i]));
				}
			}
			return cmd;
}
public System.Data.IDbDataParameter GetParameter(string dbservertype,object paras)
{
			IDbDataParameter para = null;
			switch (dbservertype.ToLower())
			{

				case "oracle": para =(OracleParameter)paras; 
					break;
                case "dm8":
                    para =  (DmParameter)paras;
                    break;
                default: para =(SqlParameter)paras; break;
			}
			return para;
}

调用示例

数据源

我们以 MS SQL SERVER 为例,提取某一项目ID的所需上传附件列表,如下图数据显示:

表(pub_imagedescript)设计基本情况如下表:

序号字段名类型说明备注
1xm_ciduniqueidentifier项目ID
2valuenvarchar(100)存储的值
3textnvarchar(100)存储的显示值用户可以看到的选择时的呈现值
4sortidint排序号

调用

假设前端 UI 有 ID 为 x_p_refImageDescript 的 DropDownList 控件 ,则调用的示例代码如下: 

ArrayList paras = new ArrayList();
string xm_cid="E5FB9BF5-6CB6-4792-B105-C4453028925D"; //项目ID
paras.Add(new SqlParameter("@cid", xm_cid));
simpledatalist("sqlserver","数据库连接串","select value,text from pub_ImageDescript where xm_cid=@cid order by sortid", paras, "text", "value", x_p_refImageDescript, true, "", "请选择一个附件");

小结

范例中所需数据库驱动链接库,请下载我的资源:

https://download.csdn.net/download/michaelline/89235824

本方法适用于 ListControl 类类型控件,比如 DropDownList、ListBox 控件等,后续我们将继续介绍升级版的感应功能,可适用于更多控件类型,感谢您的阅读,希望本文能够对您有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/583908.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RustGUI学习(iced)之小部件(四):如何使用单选框radio部件?

前言 本专栏是学习Rust的GUI库iced的合集&#xff0c;将介绍iced涉及的各个小部件分别介绍&#xff0c;最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个&#xff0c;目前处于发展中&#xff08;即版本可能会改变&#xff09;&#xff0c;本专栏基于版本0.12.1. 概述…

颠倒二进制位

优质博文IT-BLOG-CN 一、题目 颠倒给定的32位无符号整数的二进制位。 请注意&#xff0c;在某些语言&#xff08;如 Java&#xff09;中&#xff0c;没有无符号整数类型。在这种情况下&#xff0c;输入和输出都将被指定为有符号整数类型&#xff0c;并且不应影响您的实现&…

NI CRIO 9045 LABVIEW2020

1.labview工程如果要访问CRIO&#xff0c;需要设置以下&#xff0c;否则在项目中连接失败。 2.项目中如果要传文件&#xff0c;需要安装WebDEV 3.使用WebDAV将文件传输到实时(RT)目标 https://knowledge.ni.com/KnowledgeArticleDetails?idkA03q000000YGytCAG&lzh-CN

[python数据处理系列] 深入理解与实践基于聚类的过采样与欠采样技术:以K-Means为例

目录 一、过采样介绍 (一)什么是过采样 (二)过采样的优点 (三)过采样的缺点 二、欠采样介绍 (一)什么是欠采样 (二)欠采样的优点 (三)欠采样的缺点 三、基于聚类的欠抽样方法(K-Means欠采样/KMeans-Undersampling) (一)KMeans欠采样原理及其步骤介绍 (二)为什么不采…

UE4 Widget制作搜索框

效果&#xff1a; 一、控件层级结构 1.父控件层级结构 2.子控件层级结构 二、蓝图 1.先清除掉创建子项&#xff08;注意&#xff1a;这里使用的是reverse循环&#xff01;&#xff09; 2.判断是否含有关键字&#xff0c;创建子控件

盲人手机导航:科技之光引领无障碍出行新纪元

在这个日新月异的数字时代&#xff0c;科技不仅改变了我们获取信息的方式&#xff0c;更在无声中拓宽了视障人士的生活半径。盲人手机导航这一创新技术&#xff0c;正逐步成为他们探索世界、实现独立出行的重要伙伴。 对于大多数人而言&#xff0c;日常出行或许只是一次…

Vue3+Nuxt3 从0到1搭建官网项目(SEO搜索、中英文切换、图片懒加载)

Vue2Nuxt2 从 0 到1 搭建官网~ 想开发一个官网&#xff0c;并且支持SEO搜索&#xff0c;当然离不开我们的 Nuxt &#xff0c;Nuxt2 我们刚刚可以熟练运用&#xff0c;现在有出现了Nuxt3&#xff0c;那通过本篇文章让我们一起了解一下。 安装 Nuxt3 // npx nuxilatest init &…

解析Redis Key Prefix配置之谜:双冒号“::”的由来与作用

前言 在使用Spring Boot集成Redis进行应用开发时&#xff0c;为了增强缓存键的可读性和管理性&#xff0c;我们常常会在配置文件中设定一个全局的key-prefix。如果你发现存储至Redis的键自动附加了“::”&#xff0c;本文将深入探讨这一现象背后的原因&#xff0c;解析Spring …

Redis线程模型及性能优化概述

redis线程模型&#xff1a; 网络模块命令处理 redis的性能&#xff1a; 一个取决于物理内存&#xff0c;另一个是对于socket请求的处理速度。 4.0以前 单线程模式 请求流程&#xff1a;对于一个请求&#xff0c;线程会根据操作产生相应的事件&#xff08;读&#xff0c;写事…

张大哥笔记:服务器有挖矿木马程序,该如何处理?

这篇文章发表于2021年&#xff0c;今天借这个平台再发布一下&#xff0c;希望对大家有所帮助&#xff01; 今天收到一个粉丝求助&#xff0c;说收到了阿里云官方短信通知提示有挖矿程序&#xff0c;要求立即整改&#xff0c;否则会关停服务器&#xff0c;以下是我和他的对话内…

机器学习:深入解析SVM的核心概念(问题与解答篇)【二、对偶问题】

对偶问题 **问题一&#xff1a;什么叫做凸二次优化问题&#xff1f;而且为什么符合凸二次优化问题&#xff1f;**为什么约束条件也是凸的半空间&#xff08;Half-Space&#xff09;凸集&#xff08;Convex Set&#xff09;半空间是凸集的例子SVM 约束定义的半空间总结 **问题二…

CTFHub-Web-SSRF

CTFHub-Web-SSRF-WP 一、内网访问 1.题目提示说访问127.0.0.1的flag.php&#xff0c;在URL后面添加路径没想到直接访问成功 二、伪协议读取文件 1.题目提示说访问Web目录下的flag.php&#xff0c;联想到Web目录一般存放于/var/www/html/里&#xff0c;去修改URL尝试进行访问…

【多级缓存】多级缓存OpenResty,Canal,nginx本地缓存

多级缓存 安装OpenRestyOpenResty入门OpenResty获取请求参数OpenResty向tomcat服务器发送请求 在nginx与tomcat端之间添加redis缓存Redis本地缓存缓存同步缓存同步策略基于Canal的异步通知安装Canal Canal客户端 安装OpenResty OpenResty是一个基于 Nginx的高性能 Web 平台&am…

初探 JUC 并发编程:Java 并发包中并发 List 源码剖析

最近在阅读 《Java 并发编程之美》这本书&#xff0c;感觉学到了很多东西&#xff1b;所以我决定将从事书中学到的思想和一些经典的案例整理成博客的形式与大家分享和交流&#xff0c;如果对大家有帮助别忘了留下点赞和关注捏。 第五部分&#xff1a;Java 并发包中并发 List 源…

STM32CubeMX+MDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)续-音质问题解决总结

一、前言 之前进行了STM32CubeMXMDK通过I2S接口进行音频输入输出&#xff08;全双工读写一个DMA回调&#xff09;的研究总结&#xff1a; https://juejin.cn/post/7339016190612881408#heading-34 后续音质问题解决了&#xff0c;目前测试下来48khz的双声道使用效果很好&…

基于uniapp+微信小程序的智能停车场管理小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

护航智慧交通安全 | 聚铭精彩亮相2024交通科技创新及信创产品推广交流会

4月26日&#xff0c;石家庄希尔顿酒店内&#xff0c;河北省智能交通协会盛大举办2024年度交通科技创新及信创产品推广交流会。聚铭网络受邀参与&#xff0c;携旗下安全产品及解决方案精彩亮相&#xff0c;为智慧交通安全保驾护航。 为深化高速公路创新驱动发展战略&#xff0…

Java网址url工具类

功能描述 无需引入三方依赖文本匹配网址&#xff08;支持多个&#xff09;网址解析&#xff08;包括协议、主机、路径、参数等&#xff09; package com.qiangesoft.image.utils;import org.springframework.util.Assert; import org.springframework.util.CollectionUtils;i…

深度学习基础之《TensorFlow框架(16)—神经网络案例》

一、mnist手写数字识别 1、数据集介绍 mnist数据集是一个经典的数据集&#xff0c;其中包括70000个样本&#xff0c;包括60000个训练样本和10000个测试样本 2、下载地址&#xff1a;http://yann.lecun.com/exdb/mnist/ 3、文件说明 train-images-idx3-ubyte.gz: training s…

C#编程模式之装饰模式

创作背景&#xff1a;朋友们&#xff0c;我们继续C#编程模式的学习&#xff0c;本文我们将一起探讨装饰模式。装饰模式也是一种结构型设计模式&#xff0c;它允许你通过在运行时向对象添加额外的功能&#xff0c;从而动态的修改对象的行为。装饰模式本质上还是继承的一种替换方…