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 填 ...
随机推荐
- Dynamic Programming-650. 2 Keys Keyboard
Initially on a notepad only one character 'A' is present. You can perform two operations on this not ...
- python stdout 重定向
import sys class Buffer(object): def __init__(self): self.buffer = [] def write(self, *args, **kwarg ...
- 53.storm简介
一.简介 1.storm是twitter开源的一个分布式的实时计算系统,用于数据实时分析,持续计算,分布式RPC等等. 官网地址:http://storm-project.net 源码地址:https ...
- SQLAlchemy 代码学习
1.Dialect:英文含义为方言,这边只模块对不同的数据库的连接以及操作的实现. 2.engine:引擎,代表到数据库的一个连接,数据库自身有一个连接最大限制,不能超过这个限制.这里引擎可以连接多个 ...
- JSON 字符串转换为JavaScript 对象.JSON.parse()和JSON.stringify()
使用 JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象: var text = '{ "sites" : [' + '{ &qu ...
- 【链表】Partition List
题目: Given a linked list and a value x, partition it such that all nodes less than x come before node ...
- Picasso处理同一url,但资源变了的情况
问题:上传头像成功后,头像的url没变,加载头像时还是从缓存中根据url加载以前的图片. 这个问题,很多人遇到过.也受到很多同行的启发. 图片url不变,感觉不是很合理,这样会把缓存搞乱. 但是,作为 ...
- javac的泛型
?:在实例化对象的时候,不确定泛型参数的具体类型时,可以使用通配符进行对象定义. (1)?表示通配符,通配符 与 T 的区别 T:作用于模板上,用于将数据类型进行参数化,不能用于实例化对象. publ ...
- 图形学 shader教程推荐
https://www.bilibili.com/video/av37119580 http://edu.manew.com/my/course/96 http://edu.manew.com/my ...
- springboot-17-springboot的文件上传和下载
单文件上传 1, 需要使用thymeleaf模板: http://www.cnblogs.com/wenbronk/p/6565834.html src/main/resource/template ...