晓风残月
专注于.NET技术
博客园
首页
新随笔
新文章
订阅
管理
posts - 156,comments - 448,trackbacks - 38
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
最新评论
我的标签
留言簿
(16)
给我留言
查看留言
我的标签
silverlight
(1)
Error
(1)
随笔分类
.net 2.0(16)
.net framework(22)
.NET Tracks & Alerts(7)
ADO.NET(13)
AJAX(3)
AjaxPro(2)
asp.net(49)
asp.net 2.0(44)
ASP.NET DEMO(14)
C#(3)
C#Tricks&Tips(1)
Computer Maintenance(3)
CSDN 问答(9)
DataBase(1)
embeded dev
Favorites
Favorites(1)
Imagine Cup 2006(1)
IT Inforamation(1)
javascript(7)
Javascript&DHTML&CSS(9)
mobile dev
new tech preview
Oracle(8)
SQL Server(13)
SQL Server 2005(4)
Test-Driven(2)
VS 2005(8)
随笔档案
2008年9月 (3)
2008年8月 (1)
2008年7月 (4)
2008年6月 (3)
2008年5月 (11)
2007年11月 (1)
2007年10月 (5)
2007年9月 (3)
2007年8月 (5)
2007年7月 (26)
2007年6月 (3)
2007年5月 (13)
2007年4月 (8)
2007年3月 (8)
2007年2月 (1)
2007年1月 (5)
2006年11月 (6)
2006年10月 (2)
2006年9月 (2)
2006年8月 (13)
2006年7月 (1)
2006年6月 (3)
2006年5月 (6)
2006年4月 (6)
2006年3月 (7)
2006年2月 (1)
2006年1月 (4)
2005年12月 (12)
2005年11月 (12)
积分与排名
积分 - 169954
排名 - 211
最新评论
1. re: ADO.NET 如何读取 Excel (上)
那如果我导入的数据第三列是是邮箱,而数据库第二个字段是邮箱,结果插入就插入错误了
--yingko
2. re: ASP.NET DEMO 15: 如何编程动态创建 TreeView
顶!非常谢谢了
--非常谢谢
3. re: 恢复任务管理器的工具栏
在你那个方框两边白色的地方双击左键,是不是菜单又出来了,呵呵,简单。
--da hai
4. re: 书评:Introducing Microsoft Silverlight 2,2nd Edition
哦,你在microsoft上也发过这评吧
你知道国内出版社什么时候刷出来吗
--真见
5. re: Request 分别获取具有相同 name 属性表单元素值—— 怀念 Classic ASP
支持一下 我最近刚用ServerSide JScript(with mootool)+ASP写了个小应用框架 没觉得多好 只是写的心里很舒服
--dokoma
评论排行榜
1. Microsoft MVP,一项荣誉,一鼓动力,一份压力(36)
2. 【推荐收藏】Visual Studio 插件库(32)
3. 关于 StreamReader 逐字读取字符的问题(30)
4. ADO.NET 中 DataReader 各种读取方式性能比较/测试(27)
5. Request 分别获取具有相同 name 属性表单元素值—— 怀念 Classic ASP(25)
ASP.NET DEMO 13: 如何为 SqlDataSource 动态绑定变量参数
对于 xxxDataSource 来说,支持绑定参数,包括 ControlParameter、CookieParameter、SessionParameter、ProfileParameter 和 QueryStringParameter。假如参数值直接来自于应用程序变量或者通过某个方法返回呢?
查阅了关于参数基类
Parameter 类
似乎不支持此功能,有一个选择就是扩展自己的 Parameter,但是工作量比大,本身使用 xxxDataSource 就是为了快速开发。
这里采用比较“原始”方法:直接使用Web服务器控件都支持的绑定语法
<%# expression %>
先看下面这个 SqlDataSource ,其中的 SelectCommand 属性,是通过动态绑定实现的,categoryId 是一个私有类字段。
<
asp:SqlDataSource
ID
="SqlDataSource1"
runat
="server"
ConnectionString
="Data Source=.;Initial Catalog=Northwind;Integrated Security=True"
ProviderName
="System.Data.SqlClient"
SelectCommand
='<%#
"SELECT * FROM [Products] WHERE [CategoryID]
= " + categoryId %>'> <%--动态绑定 SelectCommand 命令--%>
</asp:SqlDataSource>
可以通过控件事件中改变类字段 categoryId 的值,然后调用 SqlDataSource1.DataBind() 计算此值,得出 SelectCommand
甚至可以绑定一个方法,处理一个比较复杂sql语句,并返回
<
asp:SqlDataSource
ID
="SqlDataSource3"
runat
="server"
ConnectionString
="Data Source=.;Initial Catalog=Northwind;Integrated Security=True"
ProviderName
="System.Data.SqlClient"
SelectCommand
='<%#
GetSelectCommandText() %
>
' >
<%
--
动态绑定 SelectCommand 命令
--
%>
</
asp:SqlDataSource
>
private
string
GetSelectCommandText()
{
string
sql
=
"
SELECT * FROM [Products]
"
;
if
(DropDownList1.SelectedValue
!=
""
)
{
sql
+=
"
WHERE [CategoryID] =
"
+
int
.Parse(DropDownList1.SelectedValue);
}
return
sql;
}
测试实例通过一个 DropDownList 改变 categoryId 的值
protected
void
DropDownList1_SelectedIndexChanged(
object
sender, EventArgs e)
{
categoryId
=
int
.Parse(DropDownList1.SelectedValue);
SqlDataSource1.DataBind();
//
先执行绑定数据源控件,计算 SelectCommand
GridView1.DataBind();
SqlDataSource3.DataBind();
//
先执行绑定数据源控件,计算 SelectCommand
GridView2.DataBind();
}
其实,都是 ASP.NET 1.x 中数据绑定的应用而已,唯一需要注意的是,调用数据控件(如GridView)的 DataBind 方法之前一定要先调用数据源控件(如SqlDataSource)的 DataBind() 方法。
完整代码:
<%
@ Page Language
=
"
C#
"
%>
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
script
runat
="server"
>
protected
int
categoryId
=
1
;
protected
void
Page_Load(object sender, EventArgs e)
{
if
(
!
Page.IsPostBack)
{
SqlDataSource1.DataBind();
SqlDataSource3.DataBind();
}
}
protected
void
DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
categoryId
=
int
.Parse(DropDownList1.SelectedValue);
SqlDataSource1.DataBind();
//
先执行绑定数据源控件,计算 SelectCommand
GridView1.DataBind();
SqlDataSource3.DataBind();
//
先执行绑定数据源控件,计算 SelectCommand
GridView2.DataBind();
}
private string GetSelectCommandText()
{
string sql
=
"
SELECT * FROM [Products]
"
;
if
(DropDownList1.SelectedValue
!=
""
)
{
sql
+=
"
WHERE [CategoryID] =
"
+
int
.Parse(DropDownList1.SelectedValue);
}
return
sql;
}
</
script
>
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head
runat
="server"
>
<
title
>
DataBindForSelectCommand2
</
title
>
</
head
>
<
body
>
<
form
id
="form1"
runat
="server"
>
<
div
>
<
asp:DropDownList
ID
="DropDownList1"
runat
="server"
DataSourceID
="SqlDataSource2"
AutoPostBack
="true"
DataTextField
="CategoryName"
DataValueField
="CategoryID"
OnSelectedIndexChanged
="DropDownList1_SelectedIndexChanged"
>
</
asp:DropDownList
>
<
asp:SqlDataSource
ID
="SqlDataSource2"
runat
="server"
ConnectionString
="Data Source=.;Initial Catalog=Northwind;Integrated Security=True"
ProviderName
="System.Data.SqlClient"
SelectCommand
="SELECT [CategoryID], [CategoryName] FROM [Categories]"
>
</
asp:SqlDataSource
>
<
asp:GridView
ID
="GridView1"
runat
="server"
AutoGenerateColumns
="False"
DataKeyNames
="ProductID"
DataSourceID
="SqlDataSource1"
>
<
Columns
>
<
asp:BoundField
DataField
="ProductID"
HeaderText
="ProductID"
InsertVisible
="False"
ReadOnly
="True"
SortExpression
="ProductID"
/>
<
asp:BoundField
DataField
="ProductName"
HeaderText
="ProductName"
SortExpression
="ProductName"
/>
</
Columns
>
</
asp:GridView
>
<
asp:SqlDataSource
ID
="SqlDataSource1"
runat
="server"
ConnectionString
="Data Source=.;Initial Catalog=Northwind;Integrated Security=True"
ProviderName
="System.Data.SqlClient"
SelectCommand
='<%#
"SELECT * FROM [Products] WHERE [CategoryID]
= " + categoryId %>'> <%--动态绑定 SelectCommand 命令--%>
</asp:SqlDataSource>
<asp:GridView ID="
GridView2" runat
="server"
AutoGenerateColumns
="False"
DataKeyNames
="ProductID"
DataSourceID
="SqlDataSource3"
>
<
Columns
>
<
asp:BoundField
DataField
="ProductID"
HeaderText
="ProductID"
InsertVisible
="False"
ReadOnly
="True"
SortExpression
="ProductID"
/>
<
asp:BoundField
DataField
="ProductName"
HeaderText
="ProductName"
SortExpression
="ProductName"
/>
</
Columns
>
</
asp:GridView
>
<
asp:SqlDataSource
ID
="SqlDataSource3"
runat
="server"
ConnectionString
="Data Source=.;Initial Catalog=Northwind;Integrated Security=True"
ProviderName
="System.Data.SqlClient"
SelectCommand
='<%#
GetSelectCommandText() %
>
' >
<%
--
动态绑定 SelectCommand 命令
--
%>
</
asp:SqlDataSource
>
</
div
>
</
form
>
</
body
>
</
html
>
/Files/Jinglecat/DEMO13_DataBindForSelectCommand2.rar
posted on 2007-07-27 01:48
晓风残月
阅读(1891)
评论(3)
编辑
收藏
所属分类:
asp.net
、
asp.net 2.0
、
.net 2.0
、
ASP.NET DEMO
、
CSDN 问答
FeedBack:
#1楼
2007-08-16 16:54 |
qyjun [未注册用户]
非常感谢,被此问题困扰了很久,如果再不能解决准备改用ObjectDataSource数据源控件了,该控件可以绑定方法。
回复
引用
#2楼
2007-08-28 21:36 |
你好 [未注册用户]
但如果SqlDataSource 中的数据是通过存储过程获得的,那么如何为存储过程动态绑定变量呢?
回复
引用
#3楼
[
楼主
]
2007-08-29 21:53 |
晓风残月
@你好
SqlDataSource 就是用来执行储存过程或者内联sql语句的,
不明白你的意思
给 SqlDataSource.SelectCommand 指定你存储过程名称即可
回复
引用
查看
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-07-27 01:52 编辑过
相关文章:
温故知新ASP.NET 2.0(C#)系列
ASP.NET跨页面传值技巧总结
ASP.NET AJAX入门系列
.NET设计模式系列文章
Virtual Earth ASP.NET 控件将于 7 月发布
ASP.NET缓存用户信息是否会泄露?
ASP.NET缓存的SetSlidingExpiration
ASP.NET之父强烈推荐的ASP.NET AJAX著作
ASP.NET之父强烈推荐的ASP.NET AJAX著作
相关链接:
所属分类的其他文章:
ASP.NET DEMO15_1: GridView 行单击与双击事件2
Request 分别获取具有相同 name 属性表单元素值—— 怀念 Classic ASP
ASP.NET DEMO 16: 通过GridView布局实现的多行批量更新
ASP.NET DEMO 15: 同时支持行单击和双击事件的 GridView/DataGrid
AjaxPro 返回 DataSet/DataTable/DataView 如何呈现?
ASP.NET DEMO 14: 如何在 GridView/DataGrid 模板列中使用自动回发的 CheckBox/DropDownList
ASP.NET DEMO 13: 如何为 SqlDataSource 动态绑定变量参数
ASP.NET DEMO 12 : CheckBoxList 实现单选
ASP.NET DEMO 10: 如何通过 javascript 访问 GridView/DataGrid 选中 CheckBox 行各列的值
ASP.NET DEMO 8: 为 GridView/DataGrid 整行添加服务器事件
最新IT新闻:
Facebook推出新版登录页
阿里巴巴将重新进军韩国 01年曾因发展不力撤出
美股暴跌 中国概念股周一全线大跌
美股暴跌重挫科技股:谁将挺过寒冬
百度多元化背后面临的困惑