如何实现“有条件”数据绑定?

mynull 2003-07-28 08:32:23
思路如下,在aspx文件中:
<% if isDBNull(DataBinder.Eval(Container, "DataItem.reply")) then%>
<!--判断当前绑定的reply列的内容,来决定下面显示的内容-->
内容: <%# DataBinder.Eval(Container, "DataItem.mydate")%>
<%Else%>
内容: <%# DataBinder.Eval(Container, "DataItem.mydate2")%>
<%End if%>

即根据绑定的数据情况确定进一步的,实际显示的数据。实际应用中该语句是错误的:
<% if isDBNull(DataBinder.Eval(Container, "DataItem.reply")) then%>
应该如何编写该功能的代码?
...全文
56 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liss 2003-07-29
  • 打赏
  • 举报
回复
我觉得不要用asp的那种老思路。
datagrid只是显示用的。
你可以修改datagrid的datasource,在原来的datatable中,添加一列,满足你需要的数据不就结了
saucer 2003-07-29
  • 打赏
  • 举报
回复
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script language="VB" runat="Server">
Sub Page_Load(o As Object, e as EventArgs)
if Not IsPostBack then

DataGrid1.AutoGenerateColumns = false

Dim newCol As New BoundColumn()
newCol.DataField = "au_fname"
newCol.HeaderText = "First Name"
DataGrid1.Columns.Add(newCol)

newCol = New BoundColumn()
newCol.DataField = "au_lname"
newCol.HeaderText = "Last Name"
DataGrid1.Columns.Add(newCol)

dim da as SqlDataAdapter = new SqlDataAdapter("select * from authors", _
"server=localhost;database=pubs;uid=sa;pwd=;")

dim ds as New DataSet()
da.Fill(ds,"authors")

ds.Tables("authors").Columns.Add("reply", GetType(string))
dim i as Integer
for i=0 to ds.Tables("authors").Rows.Count -1 step 2
ds.Tables("authors").Rows(i)("reply") = ""
next

DataGrid1.DataSource = ds.Tables("authors").DefaultView
DataGrid1.DataBind()


end if
End Sub
</script>
<form runat="Server">
<asp:DataGrid id="DataGrid1" runat="Server">
<Columns>
<asp:TemplateColumn HeaderText="Test Column">
<ItemTemplate>
<%# iif(Convert.IsDBNull(DataBinder.Eval(Container, "DataItem.reply")), "lastname:" & DataBinder.Eval(Container, "DataItem.au_lname"), "firstname:" & DataBinder.Eval(Container, "DataItem.au_fname")) %>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
mynull 2003-07-29
  • 打赏
  • 举报
回复
<%# iif(Convert.IsDBNull(DataBinder.Eval(Container, "DataItem.reply")), .....这样使用不知道您测试过?我的确在这里出错,我使用VB,不会犯一些低级错误的。

也许onDataListBound或onDataGridBound才是出路。
saucer 2003-07-29
  • 打赏
  • 举报
回复
what language are you using? that is for VB, if you are using C#, try

<%# Convert.IsDBNull(DataBinder.Eval(Container, "DataItem.reply")) ? DataBinder.Eval(Container, "DataItem.mydate") : DataBinder.Eval(Container, "DataItem.mydate2") %>
跋涉者 2003-07-28
  • 打赏
  • 举报
回复
我也正在寻找这解决这个问题的办法.现在我用datalist通过函数可以做到.可是还没有在datagrid中弄好.
好像可以在绑定的时候通过onDataListBound或onDataGridBound函数来设定,今天上午找到一篇介绍这个的文章,我还没来得及看,当时出去了,回来有人帮我把那个页面关了,我找不到了,气得我要死.
mynull 2003-07-28
  • 打赏
  • 举报
回复
iif(Convert.IsDBNull(DataBinder.Eval(Container, "DataItem.reply"))

提示这句有问题,BC30201: 需要表达式。似乎在if或iif中不能识别 DataBinder.Eval(Container, "DataItem.reply") 这样的表达式。
saucer 2003-07-28
  • 打赏
  • 举报
回复
yes, it is better to do at the database leve, but if you insist, try the following or use an extra function:

内容: <%# iif(Convert.IsDBNull(DataBinder.Eval(Container, "DataItem.reply")), DataBinder.Eval(Container, "DataItem.mydate"), DataBinder.Eval(Container, "DataItem.mydate2")) %>
happyno7 2003-07-28
  • 打赏
  • 举报
回复
同意楼上
xrll 2003-07-28
  • 打赏
  • 举报
回复
从数据库读取时绑定:
select case mydata when Null then mydata else mydata2 end as mydata from .....
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2003-07-28 08:32
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。