WebForm控件多字段绑定
一、这里的多字段绑定是什么意思?
多字段绑定控件其实就是把两个字段显示在一起作为一个字段现在控件上!
可能读者看了可能还是有点懵逼,说的还是比较抽象!的确,光从这上面的确是无法具体到某特定一种情况!那就直接上代码。
从标题上我们说的是古老的WebForm,咱暂且不论这个是否已经过时,既然遇到了,那就不能反抗吧......
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<a href="#"><%#Eval("Id") %>-<%#Eval("Name")%></a>
</ItemTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
上面就是非常简单的服务器空间代码,其中的下划线代码段就是我之前说的多字段绑定
当然,这也是非常简单,非常舒服的一种绑定服务器控件的情况!这样不需要我们做过多的操作,就可以多字段绑定显示在UI上
那么问题就来了:
如果是那种只能一个字段绑定的控件呢?比如DropDownList,它的DataTextField以及DataValueField属性都只能绑定一个字段吧,它不能像Repeater那样灵活的绑定多个字段
那是不是就没法子了呢?肯定是有的,只不过我们等绕一绕,好,怎么绕?
现在我们的问题是下拉框控件只能绑定一个字段,那么我是不是只要新创建一个字段,这个字段的值是其他多字段的组合值不就行了么。
有了这个思路,代码就很容易写了
假使,我们的数据源是DataTable(也可以是IEnumerable)代码如下:
DataTable dt = new DataTable();
dt.Columns.Add("Id",Type.GetType("System.Int32"));
dt.Columns.Add("Name", Type.GetType("System.String"));
DataRow dr = dt.NewRow();
dr["Id"] = ;
dr["Name"] = "Marson";
dt.Rows.Add(dr);
dr["Id"] = ;
dr["Name"] = "Shine";
dt.Rows.Add(dr);
目前只能帮顶Id/Name字段中的一个,接着我们新建一个字段列
dt.Columns.Add("IdAndName", System.Type.GetType("System.String"));
dr = dt.NewRow();
foreach (DataRow item in dt.Rows)
{
item["IdAndName"] = item["Id"].ToString() + "-" + item["Name"].ToString();
}
这样我们就只需要绑定这个IdAndName就行了
这样代码感觉还是太多了,那有没有其他的方法呢?
其实有更简单,代码量更精简的方法,关键就在 DataColumn.Expression 这个属性上
它用于筛选行、计算列中的值或创建聚合列 也支持字符串的一般拼接,多字段的拼接(注:用单引号连接,MDSN上有详细说明)
那么有了这个,于是就有了下面的代码段:
dt.Columns.Add("IdAndName", System.Type.GetType("System.String"), "Id+'-'+Name");
这样是不是更精简了呢?
如果对DataColumn.Expression有兴趣的同学,可以反编译查看是如何实现上面MSDN介绍的那些功能的
我大概的看了下,真是一脸懵逼啊,那些代码我就不知道什么意思,像下面这些 我还是没怎么看懂,功夫没到家啊
Bid.ScopeEnter(out intPtr, "<ds.DataColumn.set_Expression|API> %d#, '%ls'\n", this.ObjectID, value);
Bid.ScopeLeave(ref intPtr);
以及核心赋值Expression代码段
public DataColumn(string columnName, Type dataType, string expr, MappingType type) {
GC.SuppressFinalize(this);
Bid.Trace("<ds.DataColumn.DataColumn|API> %d#, columnName='%ls', expr='%ls', type=%d{ds.MappingType}\n",
ObjectID, columnName, expr, (int)type); if (dataType == null) {
throw ExceptionBuilder.ArgumentNull("dataType");
} StorageType typeCode = DataStorage.GetStorageType(dataType);
if (DataStorage.ImplementsINullableValue(typeCode, dataType)) {
throw ExceptionBuilder.ColumnTypeNotSupported();
}
_columnName = columnName ?? string.Empty; SimpleType stype = SimpleType.CreateSimpleType(typeCode, dataType);
if (null != stype) {
this.SimpleType = stype;
}
UpdateColumnType(dataType, typeCode); if ((null != expr) && ( < expr.Length)) {
// @perfnote: its a performance hit to set Expression to the empty str when we know it will come out null
this.Expression = expr;
}
this.columnMapping = type;
}
有童鞋知道的,告诉我下,谢谢!
WebForm控件多字段绑定的更多相关文章
- 基于SqlSugar的开发框架循序渐进介绍(9)-- 结合Winform控件实现字段的权限控制
字段的权限控制,一般就是控制对应角色人员对某个业务对象的一些敏感字段的可访问性:包括可见.可编辑性等处理.本篇随笔结合基于SqlSugar的开发框架进行的字段控制管理介绍. 在设计字段权限的时候,我们 ...
- chrome控制台查看控件有没绑定事件[转]
chrome控制台查看btn_comment_submit控件有没绑定事件 function lookEvents (elem) { return $.data ? $.data( elem, ...
- 将开始我的WebForm控件开发之旅
时间总是过得很快,一转眼三个月就过去了,三个月内发生了很多的事.因为学校的学习,离开了我入门WPF的公司:开发了第一个外包项目,做的是WebForm的:而且了马上要毕业了,毕业后的公司应该是专门用We ...
- WPF DataGrid列设置为TextBox控件的相关绑定
在wpf的DataGrid控件中,某一列的数据模板为TextBox控件的话,绑定Text="{Binding TxtSn, UpdateSourceTrigger=PropertyChang ...
- WebForm 控件(一)、连接数据库
一.控件 [简单控件] (一)文字显示 1.Label → 在html中相当于span <asp:Label ID="控件名 runat="server" Tex ...
- GridView 控件中如何绑定 CheckBoxList
需求:设计这样一个页面,在页面上可以选择和展示各省份对应的文明城市? 思路:一次性查询出所需的记录(查询数据库的操作不宜写到 C# 代码的循环语句中),并保存到全局变量中,之后根据条件过滤出需要的.可 ...
- 关于Devexpress15.2中GridControl控件选择字段ColumnEdit下拉时间设置
效果:点击表格GridControl控件中的列,可以显示日期和时间.时间可以手动修改.(绑定日期格式的字段) 设置步骤:1.点击时间字段列表设置ColumnEdit-New-选择DateEdit出现r ...
- webform控件
简单控件: 1.Label 会被编译成span标签 属性: Text:文本内容 CssClass:CSS样式 <asp:Label ID=" CssClass="aaa&qu ...
- WebForm控件--2016年12月29日
简单控件 1.Label => <span id="Label1">Label1</span> 2.Literal => Text 填 ...
随机推荐
- js中的基本类型与引用类型学习
一.基本数据类型 ECMAScript 有 5 种原始类型(primitive type),即 Undefined.Null.Boolean.Number 和 String,也称为基本数据类型,ES6 ...
- Python 获取秒级时间戳与毫秒级时间戳
原文:Python获取秒级时间戳与毫秒级时间戳 1.获取秒级时间戳与毫秒级时间戳 import time import datetime t = time.time() print (t) #原始时间 ...
- OpenSL的使用
#include <jni.h> #include <string> #include <SLES/OpenSLES.h> #include <SLES/Op ...
- FFmpeg音视频解封装
一 . 解封装用到的函数和结构体 1.av_register_all() : open 一次就调用一次 2.avformat_network_init() : 网络模块初始化 3.avformat_o ...
- Elasticsearch入门 + 基础概念学习
原文地址:https://www.cnblogs.com/shoufeng/p/9887327.html 目录 1 Elasticsearch概述 1.1 Elasticsearch是什么 1.2 E ...
- 内置装饰器一:@classmethod、@staticmathod
使用 @classmethod 和 @staticmathod 后,类的方法的调用 一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmet ...
- 《Python绝技:运用Python成为顶级黑客》 用Python进行取证调查
1.你曾经去过哪里?——在注册表中分析无线访问热点: 以管理员权限开启cmd,输入如下命令来列出每个网络显示出profile Guid对网络的描述.网络名和网关的MAC地址: reg query &q ...
- jzoj5848
小 S 热爱大自然, 一天他种了一棵奇怪的线段树. 奇怪的线段树是一种与普通线段树类似的结构, 唯一不同的是, 它不一定以每一个区间的中点作为分治中心. 麻烦的是, 小 S 的线段树被风吹散了, 散成 ...
- Android 美学设计基础 <1>
在做原型的时候,和设计师交流的过程中,发现在设计安卓交互的过程中,其实是存在一些基本规则的.那这些规则,可以保证第一应用美观,第二不会出现反人类的开发难度,第三,用设计师的话说就是可能会有“最好的体现 ...
- 深入理解java内存模型
深入理解Java内存模型(一)——基础 深入理解Java内存模型(二)——重排序 深入理解Java内存模型(三)——顺序一致性 深入理解Java内存模型(四)——volatile 深入理解Java内存 ...