一、这里的多字段绑定是什么意思?

多字段绑定控件其实就是把两个字段显示在一起作为一个字段现在控件上!

可能读者看了可能还是有点懵逼,说的还是比较抽象!的确,光从这上面的确是无法具体到某特定一种情况!那就直接上代码。

从标题上我们说的是古老的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控件多字段绑定的更多相关文章

  1. 基于SqlSugar的开发框架循序渐进介绍(9)-- 结合Winform控件实现字段的权限控制

    字段的权限控制,一般就是控制对应角色人员对某个业务对象的一些敏感字段的可访问性:包括可见.可编辑性等处理.本篇随笔结合基于SqlSugar的开发框架进行的字段控制管理介绍. 在设计字段权限的时候,我们 ...

  2. chrome控制台查看控件有没绑定事件[转]

    chrome控制台查看btn_comment_submit控件有没绑定事件 function lookEvents (elem) {     return $.data ? $.data( elem, ...

  3. 将开始我的WebForm控件开发之旅

    时间总是过得很快,一转眼三个月就过去了,三个月内发生了很多的事.因为学校的学习,离开了我入门WPF的公司:开发了第一个外包项目,做的是WebForm的:而且了马上要毕业了,毕业后的公司应该是专门用We ...

  4. WPF DataGrid列设置为TextBox控件的相关绑定

    在wpf的DataGrid控件中,某一列的数据模板为TextBox控件的话,绑定Text="{Binding TxtSn, UpdateSourceTrigger=PropertyChang ...

  5. WebForm 控件(一)、连接数据库

    一.控件 [简单控件] (一)文字显示 1.Label → 在html中相当于span  <asp:Label ID="控件名 runat="server" Tex ...

  6. GridView 控件中如何绑定 CheckBoxList

    需求:设计这样一个页面,在页面上可以选择和展示各省份对应的文明城市? 思路:一次性查询出所需的记录(查询数据库的操作不宜写到 C# 代码的循环语句中),并保存到全局变量中,之后根据条件过滤出需要的.可 ...

  7. 关于Devexpress15.2中GridControl控件选择字段ColumnEdit下拉时间设置

    效果:点击表格GridControl控件中的列,可以显示日期和时间.时间可以手动修改.(绑定日期格式的字段) 设置步骤:1.点击时间字段列表设置ColumnEdit-New-选择DateEdit出现r ...

  8. webform控件

    简单控件: 1.Label 会被编译成span标签 属性: Text:文本内容 CssClass:CSS样式 <asp:Label ID=" CssClass="aaa&qu ...

  9. WebForm控件--2016年12月29日

    简单控件 1.Label  =>   <span id="Label1">Label1</span> 2.Literal  =>  Text 填 ...

随机推荐

  1. SQL查询和替换含有回车,空格,TAB,等

    ---如下是查询语句 --查询名称有退格键 ),item_name) go --查询名称有制表符tab ),item_name) go --查询名称有换行 ),item_name) go --查询名称 ...

  2. Advanced Debugging and the Address Sanitizer

    A debug trick 在异常端点处运行 po $arg1,找出异常信息.  Address Sanitizer 概述 是一个运行时检测工具 发现内存问题 可以用于模拟器和设备 可以发现的问题 ...

  3. C#使用 RNGCryptoServiceProvider 生成强随机字符串

    为了生成更加可靠的随机数,微软在System.Security.Cryptography命名空间下提供一个名为system.Security.Cryptography.RNGCryptoService ...

  4. 简单HOG+SVM mnist手写数字分类

    使用工具 :VS2013 + OpenCV 3.1 数据集:minst 训练数据:60000张 测试数据:10000张 输出模型:HOG_SVM_DATA.xml 数据准备 train-images- ...

  5. css实现带箭头的流程条

    直接上效果图: <ul class="navs"> <li>1</li> <li>2</li> <li>3& ...

  6. 微信小程序云函数 添加数据到数据库

    1.新建小程序,建立云开发快速启动模板 这里和普通小程序的区别有三点 一是 project.config.json写上云函数所在目录"cloudfunctionRoot": &qu ...

  7. WebAPI POST GET

    简而言之,在WEBAPI中采用GET方法方法时在接受参数的时候会在参数前申明 [fromuri]标注从uri中获取如: [HttpPost] public IHttpActionResult AddP ...

  8. 各种”xxx“ native gem required installed build tools 报错

    报错情况:(类似毛病 提示native gem require installed builld tools的解决方法是一样的)) 解决方法:http://rubyinstaller.org/down ...

  9. CountDownTimer倒计时器的使用

    以前好多倒计时的需求都需要自己去写,今天发现android 原来自带了倒计时的类CountDownTimer,和适合用于发送短信 ,等待验证码的情况 代码展示了在一个TextView进行60S的倒计时 ...

  10. facebook 摘要生成阅读笔记(二) Abstractive Sentence Summarization with Attentive Recurrent Neural Networks

    整体流程与第一篇差不多,只是在encoder和decoder加入了RNN Encoder: 1. ai=xi+li ai=词向量+词在序列中的位置信息(相当于一个权重,[M, 1]) 流程: 先是CN ...