纠结了很久留言系统的回复以什么样的形式实现,最后还是选择又建了一个专门回复的页面,用户点链接后进入回复界面回复。虽然不是初衷,但功能还是很快实现了。
接下来最纠结的来了,留言的回复如何能在被回复者的后面依次显示??也就是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:目前留言系统的基本功能已经基本完善,包括留言,分页显示,删除、回复,回复显示。有待完善的是:自动换行,留言内容特殊字符转换,验证码等