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"] = 1;
dr["Name"] = "Marson";
dt.Rows.Add(dr);
dr["Id"] = 2;
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) && (0 < 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;
        }

有童鞋知道的,告诉我下,谢谢!

时间: 2024-10-26 20:09:24

WebForm控件多字段绑定的相关文章

java android布局里的控件值 反射绑定给实体类,实体类绑定给控件,表单提交绑定很有用

注意了:根据实际情况,添加实体里字段的类型,控件类型的判断才可使用.这里控件只有TextView EditText 实体类字段只有String int类型,带值的控件添加tag ,值和实体类的字段值一致 package ice.ui.service; import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import jav

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

时间总是过得很快,一转眼三个月就过去了,三个月内发生了很多的事.因为学校的学习,离开了我入门WPF的公司:开发了第一个外包项目,做的是WebForm的:而且了马上要毕业了,毕业后的公司应该是专门用WebForm的.所以,看来原来我所喜爱的WPF只将成为我的业余爱好啦... 话说之前是基本没有WEB的开发知识的,对什么Html,CSS,JS都是一知半解,所以,又要开始新的学习啦!WebForm控件开发就要开始啦!

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

chrome控制台查看btn_comment_submit控件有没绑定事件 function lookEvents (elem) {     return $.data ? $.data( elem, "events", undefined, true ) : $._data( elem, "events" ); } var event = lookEvents($("#btn_comment_submit")[0]); // 获取绑定的事件 u

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

一.控件 [简单控件] (一)文字显示 1.Label → 在html中相当于span  <asp:Label ID="控件名 runat="server" Text="显示的文本"></asp:Label>2.Literal → 仅文字 → 一般用来输出JS代码  <asp:Literal ID="Literal1" runat="server"></asp:Literal

WebForm 控件(二)

控件 Calendar:日历控件 但是html代码了太大不适用 FileUpdate: 文件上传 HiddenField:隐藏域 Image: 图片  可以直接给URL 不适用可用html代码写 Table:表格  不适用 验证类登录类自带控件不要用 [Repeater]: HeaderTemplate - 在加载开始执行一遍 ItemTemplate - 有多少条数据,执行多少遍 FooterTemplate - 在加载最后执行一遍 AlternatingItemTemplate - 交替项模

Asp.Net中ObjectDataSource控件传参绑定数据

最近在实习,在上头交付的任务中,由于需要使用Asp.Net的ListView控件,因此必然得就使用了ObjectDataSource控件,由于在使用过程中,需要网页中的参数发送到后台后,运行该参数进行查询数据.这过程必然就牵涉到将参数传送给ObjectDataSource控件,然后在进行查询后的数据绑定.下面我们来看下这个过程是如何实现的: 1.创建一个WebForm页面,拖入ListView控件和ObjectDataSource控件 2.配置ObjectDataSource数据源按照以下步骤进

常用的WebForm 控件

首先回忆一下Html页中的12个表单元素 1 1.文本类 2 文本框 <input type="text" id="" name="" value="" /> 3 密码框 <input type="password" id="" name="" value="" /> 4 文本域 <textarea id="

C#Webform 控件

Html表单 文本类: <input type="text" /> - 文本框  <input type="password" /> - 密码框  <textarea></textarea> - 文本域  <input type="hidden" /> - 隐藏域 按钮类: <input type="button" value="按钮1" /

WebForm 控件

一.简单控件 1.Label(作用:显示文字) Web中: <asp:Label ID="Label1" runat="server" Text="Label" BorderColor="Black" BorderStyle="Solid" BorderWidth="5px"></asp:Label> 编译完成后的元素时span(html) <span id