datalist嵌套

纠结了很久留言系统的回复以什么样的形式实现,最后还是选择又建了一个专门回复的页面,用户点链接后进入回复界面回复。虽然不是初衷,但功能还是很快实现了。

接下来最纠结的来了,留言的回复如何能在被回复者的后面依次显示??也就是reply里的内容如何对应的显示在message后面了.message的分页显示是通过控件datalist实现的,很直接的想法是里面再嵌套一个datalist,那上一个datalist所对应的id如何和reply里的messageid对应,下一层的datalist如何获得上一层所需id成了首要解决的问题。

倒先是用了一个方法<asp:Label visible="hidden" id="LbPassId" runat="server" Text=<%#eval("id").ToString()%>></asp:visible>,将它放在第一层datalist里,预期是在cs函数里第二层datalist可以通过string ID = LbPassId.Text;来实现Id的传递。但结果很明显是错误的。看来这个传递方法行不通。

无奈开始在网上寻觅,倒还真有所收获:

**************************************************************************************************

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataListNesting.aspx.cs" Inherits="DataListNesting" %>
<!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>DataListNesting</title>
 </head>
  <body> <form id="form1" runat="server">
  <div>
  <asp:DataList ID="DataList1" runat="server">
   <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("OrderID") %>'>
   </asp:Label>
   <asp:Label ID="Label2" runat="server" Text='<%# Eval("CustomerID") %>'>
   </asp:Label>
    <asp:DataList ID="DataList2" runat="server" DataSource='<%# GetDetails(Eval("OrderID").ToString()) %>'>
    <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("ProductID") %>'>
    </asp:Label> <asp:Label ID="Label2" runat="server" Text='<%# Eval("UnitPrice") %>'>
    </asp:Label> <asp:Label ID="Label3" runat="server" Text='<%# Eval("Quantity") %>'></asp:Label>
    </ItemTemplate> </asp:DataList> </ItemTemplate> </asp:DataList>
    </div> </form>
    </body>
    </html>
aspx.cs

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

 using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls; using System.Data.SqlClient;

public partial class DataListNesting : System.Web.UI.Page

{
private void BindList()
{ SqlConnection cn = new SqlConnection(@"server=./sqlexpress;uid=sa;pwd=;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("select OrderID, CustomerID from Orders", cn);
DataSet ds = new DataSet();
cn.Open();
da.Fill(ds);
cn.Close();
DataList1.DataSource = ds.Tables[0].DefaultView;
 DataList1.DataKeyField = "orderID";
 DataList1.DataBind();
 }
protected DataTable GetDetails(string orderID)
{
SqlConnection cn = new SqlConnection(@"server=./sqlexpress;uid=sa;pwd=;database=northwind;");
 SqlDataAdapter da = new SqlDataAdapter("select ProductID, UnitPrice, Quantity from [Order Details] where orderID = @orderID", cn); da.SelectCommand.Parameters.AddWithValue("@orderID", orderID);
  DataSet ds = new DataSet();
  cn.Open();
  da.Fill(ds);
  cn.Close();
  return ds.Tables[0]; }
private void Page_Load(object sender, System.EventArgs e)
 {

if (!IsPostBack)

{ BindList(); }

}

}

*************************************************************************************************************

代码是有点乱,不过经过研究发现它正是我所需要的,它以一个略微完整的例子很好的解释了如何实现嵌套。ok,那就改代码实现我的功能吧。不过貌似也不会让我那么轻松,即使我按照上面的方法做了。它却总是报错,da.Fill(ds); 标准类别不匹配,我看来看去也实在看不出我的代码怎么就不匹配了, string strsql = "select *from reply where messageid = ‘+ID.ToInt32()+'"; 你觉得这样不匹配么?调了n编,换了各种方法将string ID转换为整型,但始终是不匹配。没办法,继续在网上搜...

**************************************************************************************

最近使用Access,碰到的一个问题,这个问题在SQL中当然是不会发生的。值得注意。
在select语句中则不会发生错误。
原文转自:http://blog.csdn.net/studydotnet/archive/2005/11/20/533331.aspx
在Access中,是无法使用存储过程的,但可以使用文本命令,如
update news set title=@title,types=@types,context=@context where id=@id ID字段类型为自动增加,这句语句放在sql里是不会有问题的,但在access却有一个明显的错误:
标准表达式中数据类型不匹配(另外一种结果就是不会更新该条记录) 而造成的这个问题的原因就在于id的字段类型,在access where id=@id 如果id类型为数字,那么就不能存在''(在sql这里''是指定一个字段的值用,如'aaa'),
而上面的文本命令的最后执行结果是update news set title='标题',types='类型' ,context='内容' where id='1' ,
不知道这种错误算什么错误:( 而正确的语句应该是update news set title='标题',types='类型' ,context='内容' where id=1 ,偏偏delete 语句又不会出现上面所说的错误,如:delete from news where id=@id

*****************************************************************************************************

看到它你有没感到很无语?一个细微的细节,却浪费了大量的时间。不过最后调出来了,感觉还是很不错。

ps:目前留言系统的基本功能已经基本完善,包括留言,分页显示,删除、回复,回复显示。有待完善的是:自动换行,留言内容特殊字符转换,验证码等

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值