zoukankan      html  css  js  c++  java
  • Telerik RadComboBox 多列下拉框第一项无法触发 SelectedIndexChanged 事件

    原因:没有正确设置 DataTextField.

    分析:RadComboBox 控件的客户端 js 代码中,会判断选择的项和当前选项是否相等,如果不同,才会触发 SelectedIndexChanged 事件。

    开始的时候不知道这个怪异的行为,仅仅设置了 DataValueField 字段。

    但实际上单凭这个 telerik 的 js 代码还无法区分两个 item 是否相等。

    所以,要“正确设置 DataTextField” 的准确含义实际上是说,要通过这样设置之后,绑定到数据源后产生的所有 item 的 Text 也互不相同。这样 RadComboBox 的客户端代码才能对他们进行区分。

    这破控件的 bug 害我调试了好几个小时,到现在才找到根本原因。shit…

    附最终调试通过的用模板实现的多列下拉框的前台代码:

    <telerik:RadComboBox ID="cmbOptions" runat="server" Height="80px" Width="250px"
    	DropDownWidth="500px" 
    	EmptyMessage='<%# GetSelectTip() %>'
    	HighlightTemplatedItems="true"
    	DataSource='<%# GetOptions(Eval("Id").ToString()) %>'
    	DataTextField="OptionText"
    	EnableTextSelection="false"
    	Skin="WebBlue"<telerik:RadComboBox ID="cmbOptions" runat="server" Height="80px" Width="250px"
    	DropDownWidth="500px" 
    	EmptyMessage='<%# GetSelectTip() %>'
    	HighlightTemplatedItems="true"
    	DataSource='<%# GetOptions(Eval("Id").ToString()) %>'
    	DataTextField="OptionText"
    	EnableTextSelection="false"
    	Skin="WebBlue"
    	AutoPostBack="true"
    	DataValueField="Value"
    	SelectedValue='<%# GetSelectedValue(Eval("Id").ToString()) %>'
    	AppendDataBoundItems="false"
    	OnSelectedIndexChanged="cmbOptions_SelectedIndexChanged">
    	<HeaderTemplate>
    		<table style=" 460px" cellspacing="0" cellpadding="0">
    			<tr>
    				<td style=" 250px; white-space: normal; text-align: left;">Column 1</td>
    				<td style=" 80px;">Column 2</td>
    				<td style=" 50px; text-align: center;">Column 3</td>
    				<td style=" 80px; text-align: right;">Column 4</td>
    			</tr>
    		</table>
    	</HeaderTemplate>
    	<ItemTemplate>
    		<table style=" 460px;" cellspacing="0" cellpadding="0">
    			<tr>
    				<td style=" 250px; white-space: normal; text-align: left;"><%#Eval("OptionText")%></td>
    				<td style=" 80px; text-align: center;"><%# FormatNumber(Eval("Col2"), 2)%></td>
    				<td style=" 50px; text-align: center;"><%#Eval("Col3")%></td>
    				<td style=" 80px; text-align: right;"><%#Eval("Col4")%></td>
    			</tr>
    		</table>
    	</ItemTemplate>
    </telerik:RadComboBox>
    
    	AutoPostBack="true"
    	DataValueField="Value"
    	SelectedValue='<%# GetSelectedValue(Eval("Id").ToString()) %>'
    	AppendDataBoundItems="false"
    	OnSelectedIndexChanged="cmbOptions_SelectedIndexChanged">
    	<HeaderTemplate>
    		<table style=" 460px" cellspacing="0" cellpadding="0">
    			<tr>
    				<td style=" 250px; white-space: normal; text-align: left;">Column 1</td>
    				<td style=" 80px;">Column 2</td>
    				<td style=" 50px; text-align: center;">Column 3</td>
    				<td style=" 80px; text-align: right;">Column 4</td>
    			</tr>
    		</table>
    	</HeaderTemplate>
    	<ItemTemplate>
    		<table style=" 460px;" cellspacing="0" cellpadding="0">
    			<tr>
    				<td style=" 250px; white-space: normal; text-align: left;"><%#Eval("OptionText")%></td>
    				<td style=" 80px; text-align: center;"><%# FormatNumber(Eval("Col2"), 2)%></td>
    				<td style=" 50px; text-align: center;"><%#Eval("Col3")%></td>
    				<td style=" 80px; text-align: right;"><%#Eval("Col4")%></td>
    			</tr>
    		</table>
    	</ItemTemplate>
    </telerik:RadComboBox>

    可以看到上面大量使用了绑定语法。后台只要 DataBind() 调用一下就全都自动填充了,包括当前选项也能记住 (通过 SelectedValue=’<%# … %>’的绑定实现)。

  • 相关阅读:
    Redis 学习(二十)服务器
    Redis 学习(十八)连接
    Redis学习(十七) 脚本
    Redis学习(十六)事务
    Redis学习(十四) 发布订阅
    python中如何使用requests模块下载文件并获取进度提示?
    Python实例获取mp3文件的tag信息
    python 视频处理,提取视频相关帧,读取Excel
    爬虫数据采集技术趋势-智能化解析
    Python中文转拼音代码(支持全拼和首字母缩写)
  • 原文地址:https://www.cnblogs.com/RChen/p/1981984.html
Copyright © 2011-2022 走看看