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

news2024/11/24 12:09:59

目录

关于数据感应

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 控件等,后续我们将继续介绍升级版的感应功能,可适用于更多控件类型,感谢您的阅读,希望本文能够对您有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Anddroid系统APK卸载流程源码分析

这一章我们介绍APK的卸载过程&#xff0c;大致了解这里的卸载的过程如下&#xff1a; 1.从PMS的内部结构上删除acitivity、service、provider等信息 2.删除code、library和resource等信息 3.调用installd删除/data/data/packageName以及/data/dalvik-cache下面的文件 4.更新Set…

python学习笔记----函数(五)

一、函数介绍 在 Python 中&#xff0c;函数是一个组织好的、可重用的代码块&#xff0c;用来执行一个单一的、相关的动作。函数提供了代码的模块化和代码复用的能力。它可以接受输入参数&#xff0c;并可以返回一个结果。函数在 Python 编程中是基本的构建块之一。 二、函数…

前端入门:HTML(CSS边距,塌陷)

1.CSS边距 auto:浏览器自动计算的边距 length&#xff1a;以px,pt,cm等为单位指定边距&#xff0c;pt代表的是磅&#xff0c;1磅0.376毫米。 %&#xff1a;以父元素宽度的百分比来指定边距。 其中&#xff0c;length和%都可以取负值&#xff0c;表示减少外边距的空间大小。 …

面向对象练习题【从零开始学Java】

Java零基础系列课程-JavaSE基础篇 Lecture&#xff1a;波哥 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。…

Docker有哪些常见命令?什么是Docker数据卷?

喜欢就点击上方关注我们吧&#xff01; 哈喽&#xff0c;大家好呀&#xff01;这里是码农后端。上一篇我们介绍了Docker的安装以及腾讯云镜像加速源的配置。本篇将带你学习Docker的常见命令、数据卷及自定义镜像等相关知识。 1、什么是镜像与容器&#xff1f; 利用Docker安装应…

RS0104YQ功能和参数介绍以及规格详情

RS0104YQ功能和参数介绍以及规格详情-公司新闻-配芯易-深圳市亚泰盈科电子有限公司 RS0104YQ 是一款由润石科技&#xff08;Runic Semiconductor&#xff09;生产的肖特基整流器。肖特基整流器是一种半导体器件&#xff0c;它利用金属-半导体接触形成的肖特基势垒来实现整流功…

华为校招机试 - 满二叉搜索树查找(20240424)

在线OJ测试 题目详情 - 满二叉搜索树查找 - HydroOJ 题目描述 给定 (2^n) - 1 个不同的整数(1 ≤ n ≤ 10,n 为整数),构建一棵平衡满二叉搜索树。 二叉搜索树定义如下: 节点的左子树只包含小于当前节点的数节点的右子树只包含大于当前节点的数所有左子树和右子树自身必…

手把手教你在本机安装Stable Diffusion秋叶整合包

因为网上讲部署的文章挺多的&#xff0c;所以本来不打算写这个&#xff0c;但是有些网友提出了要求&#xff0c;另外我也准备总结下在AI绘画方面的一些经验&#xff0c;从经验完整性上考虑&#xff0c;还是得有这部分的内容。 整合包对非技术出身的同学比较友好&#xff0c;因为…

Linux学习(一)

笔者给各位读者的建议是每天背 30 个在电脑上看到的不认识的单词 1) 文件系统 提供计算机存储信息的结构&#xff0c;信息存储在文件中&#xff0c;文件主要存储在计算机的内部硬盘里&#xff0c;在目录的分层结构中组织文件。文件系统为操作系统提供了组织管理数据的方式。 …

银河麒麟V10 ARM64 离线安装 新版Docker

查询当前发行版本 nkvers下载最新版本 卸载旧依赖 卸载已经安装的老版本 yum remove docker \containerd.io \docker-runc \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine \docker-compo…

kubernetes 1.30.0 Containerd 离线搭建

准备 准备两台主机 主机名IPCPU架构mx-text-01192.168.0.222ARM64mx-text-02192.168.0.223ARM64 主机要求&#xff1a; 2Core 2G RAM 配置主机名映射 添加映射 192.168.0.222 mx-test-01 192.168.0.223 mx-test-02cat /etc/hosts关闭SELinux setenforce 0sed -i s/^SELI…

电商独立站||跨境电商独立站网站搭建|功能系统搭建||API接口接入

搭建多语言跨境电商独立站系统 前台主要功能模块 短信接口 第三方登陆 支付方式 会员中心 代购订单列表 - new 会员签到 -1000(1) new 支付密码 ---1000 国内流程 -----5000 new 订单运单多退少补 -1000 未付款运单取消功能 - 修改运单运输方式 -----1000 年费会员 -----3000 …

TimeoutException,带宽影响连接超时

在做压测试过程中发现本机测试正常&#xff0c;线上服务器报错如下&#xff1a; io.lettuce.core.RedisCommandTimeoutException: Command timed out after 15 second(s) 查看公网带流量情况&#xff1a; 服务器带宽 服务器的公网带宽配置为10Mbps&#xff0c;当服务器的出网…

解决Blender导出FBX文件到Unity坐标轴错误的问题

发现Blender的模型导入到Unity里面有问题,简单研究了下发现是坐标系不同,Unity使用的是左手坐标系,Blender使用的是右手坐标系 。 下面直接将如何解决 首先忽略Blender的右手坐标系以及Z轴朝上的事&#xff0c;依照unity坐标系情况修改模型物体的旋转&#xff0c;以Blender猴…

Linux服务器安装Anaconda并运行Python程序

目录 1. Linux服务器安装Anaconda1.1 下载Anaconda安装包1.2 安装Anaconda 2. 添加Conda环境变量3. Conda常用操作3.1 创建虚拟环境3.2 激活环境3.3 删除环境3.4 其他常用命令 4. 安装合适版本的Pytorch5. Linux服务器运行Python程序5.1 前端运行5.2 后台挂载5.3 后台进程 6. 一…

苹果和OpenAI再续前缘,iOS 18会是颠覆级的吗?|TodayAI

据彭博社最新报道&#xff0c;苹果公司已经与人工智能领域的先锋企业OpenAI重启了对话&#xff0c;双方目前正在讨论一项可能的合作&#xff0c;以将OpenAI的生成式人工智能技术整合到苹果即将推出的iOS 18操作系统中。这一举措表明&#xff0c;苹果正加速其在人工智能技术上的…

第G9周:ACGAN理论与实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 上一周已经给出代码&#xff0c;需要可以跳转上一周的任务 第G8周&#xff1a;ACGAN任…

什么是视频号小店?小店怎么做?详细玩法流程来了

大家好&#xff0c;我是电商笨笨熊 视频号小店成了今年电商市场又一热门项目&#xff1b; 作为腾讯推出的电商&#xff0c;不少人曾说过&#xff0c;视频号小店会成为下一个风口&#xff1b; 那么视频号小店到底是什么&#xff0c;值得投入吗&#xff0c;又该怎么做呢&#…

[华为OD]C卷 给定一个数组,数组中的每个元素代表该位置的海拔高度 山脉的个数 200

题目&#xff1a; 给定一个数组&#xff0c;数组中的每个元素代表该位置的海拔高度。0表示平地&#xff0c;&#xff1e;1时表示属于某个 山峰&#xff0c;山峰的定义为当某个位置的左右海拔均小于自己的海拔时&#xff0c;该位置为山峰。数组起始位 置计算时可只满足一边…

AI助力后厨可视化智慧监管,让“舌尖安全”看得见

一、背景与需求分析 夏天是食物易腐败的季节&#xff0c;高温容易引发食品安全问题。在后厨环境中&#xff0c;食品安全问题可能涉及食品加工、后厨环境、食品是否被污染等方面&#xff0c;而不合格的食品安全管理可能导致食品中毒事件等风险&#xff0c;损害消费者的健康和餐…