我有crm应用程序。我有一个困难,我如何绑定转发器控制作为消息线程。像第一个线程作为问题,第二个线程作为该问题的答案。如果用户问了多个问题,那么第一,第二,...线程作为问题而且就像消息聊天一样...
用于保存数据库中的数据我使用此存储过程:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ViewMessageThreads] (@inquiry_id varchar(50))
AS
BEGIN
SET NOCOUNT ON;
select
i.body as master_body,
h.body as history_body,
q.body as question_body,
q.Created_date as question_timestamp,
a.body as answer_body,
a.Created_date as answer_timestamp,
t.Type_name as user_type
from tbl_Inquiry_History i
left join tbl_Inquiry_master h on h.Inquiry_id=i.Inquiry_id
left join tbl_Question q on q.Inquiry_id=i.Inquiry_id
left join tbl_Answer a on a.Question_id=q.Inquiry_id
left join tbl_User_master u on u.Id=i.User_id
left join tbl_Login_master l on l.Id=u.User_id
left join tbl_Type t on t.Id = l.type_id
where (i.Inquiry_id=@inquiry_id)
END
这给我的结果如下:
master_body history_body question_body question_t.. answer_body answer_t.. user_type
__________________________________________________________________________________________
question 1 NULL question 1 2005-03-14... NULL NULL User
question 1 NULL question 2 2005-03-14... NULL NULL User
我包含了这个转发器的设计源:
<asp:Repeater ID="Repeater_Inquiry_Messages" runat="server">
<ItemTemplate>
<table id="ctl00_ContentPlaceHolder1_dl_ticketmsg" cellspacing="0" border="0" style="width:100%;border-collapse:collapse;">
<tbody><tr>
<td style="background-color:#F5F5FF;">
<table cellpadding="0" cellspacing="0" border="0">
<tbody><tr>
<td class="header">
<span id="ctl00_ContentPlaceHolder1_dl_ticketmsg_ctl00_lbl_msg_no"><%#Container.ItemIndex+1 %></span></td>
<td class="normaltext" valign="bottom">
<span id="ctl00_ContentPlaceHolder1_dl_ticketmsg_ctl00_lbl_tagline">Message By <b><asp:Label ID="lbl_user_t" runat="server" Text='<%#Eval("user_type")%>'/></b> on <asp:Label ID="lbldatetime" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "question_timestamp","{0:ddd, dd MMMM yyyy}")%>'/></span></td>
</tr>
<tr>
<td class="header">
</td>
<td class="normaltext" valign="bottom">
<b>Message :</b><br>
<span id="ctl00_ContentPlaceHolder1_dl_ticketmsg_ctl00_Label1"><asp:Label ID="lbl_inquiry_desc" runat="server" Text='<%#Eval("question_body")%>'/></span></td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</ItemTemplate>
<SeparatorTemplate>
<table>
<tr>
<td style="height:3px"></td>
</tr>
</table>
</SeparatorTemplate>
<ItemTemplate>
<table id="ctl00_ContentPlaceHolder1_dl_ticketmsg1" cellspacing="0" border="0" style="width:100%;border-collapse:collapse;">
<tbody><tr>
<td style="background-color:#F5F5FF;">
<table cellpadding="0" cellspacing="0" border="0">
<tbody><tr>
<td class="header">
<span id="ctl00_ContentPlaceHolder1_dl_ticketmsg1_ctl00_lbl_msg_no"><%#Container.ItemIndex+1 %></span></td>
<td class="normaltext" valign="bottom">
<span id="ctl00_ContentPlaceHolder1_dl_ticketmsg1_ctl00_lbl_tagline">Message By <b><asp:Label ID="Label1" runat="server" Text='<%#Eval("user_type")%>'/></b> on <asp:Label ID="Label2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "answer_timestamp","{0:ddd, dd MMMM yyyy}")%>'/></span></td>
</tr>
<tr>
<td class="header">
</td>
<td class="normaltext" valign="bottom">
<b>Message :</b><br>
<span id="ctl00_ContentPlaceHolder1_dl_ticketmsg1_ctl00_Label1"><asp:Label ID="Label3" runat="server" Text='<%#Eval("answer_body")%>'/></span></td>
</tr>
<tr>
<td class="header">
</td>
<td class="normaltext" valign="bottom">
<b></b>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</ItemTemplate>
</asp:Repeater>
当我评论第二个消息线程时,这给了我唯一的问题线程。 - - - - - - - - - - - - - - - - - - - - 更新 - - - - - ------------------------------ 请帮帮我..
---------------------------------------更新------- ---------------------------------
Server Error in '/OmInvestmentStockMarketing_new' Application.
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS1026: ) expected
Source Error:
Line 162: <span id="ctl00_ContentPlaceHolder1_dl_ticketmsg_ctl00_lbl_msg_no"><%#Container.ItemIndex+1 %></span></td>
Line 163: <td class="normaltext" valign="bottom">
Line 164: <span id="ctl00_ContentPlaceHolder1_dl_ticketmsg_ctl00_lbl_tagline">Message By <b><asp:Label ID="lbl_user_t" runat="server" Text='<%# If(Eval("cargo2").ToString() Is "Admin", "You", Eval("cargo2"))%>'/></b>
Line 165: on <asp:Label ID="lbldatetime" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"cargo1","{0:ddd, dd MMMM yyyy}")%>'/></span></td>
Line 166: </tr>
Source File: c:\Documents and Settings\Vishal\My Documents\Visual Studio 2005\WebSites\OmInvestmentStockMarketing_new\Admin\OWM_Inquiry.aspx Line: 164
Show Detailed Compiler Output:
Show Complete Compilation Source:
Version Information: Microsoft .NET Framework Version:2.0.50727.3053; ASP.NET Version:2.0.50727.3053
---------------------------更新------------------- ------------------------
<asp:Repeater ID="Repeater_Inquiry_Messages" runat="server">
<ItemTemplate>
<div style='display: <%# Container.ItemIndex == 0 ? "none" : "block" %>'>
<table id="ctl00_ContentPlaceHolder1_dl_ticketmsg" cellspacing="0" border="0" style="width:100%;border-collapse:collapse;">
<tbody><tr>
<td style="background-color:#F5F5FF;">
<table cellpadding="0" cellspacing="0" border="0">
<tbody><tr>
<td class="header">
<span id="ctl00_ContentPlaceHolder1_dl_ticketmsg_ctl00_lbl_msg_no"><%--<%#Container.ItemIndex+1 %>--%><%# Container.ItemIndex.ToString() == "0" ? int.Parse("1") : Container.ItemIndex %></span></td>
<td class="normaltext" valign="bottom">
<span id="ctl00_ContentPlaceHolder1_dl_ticketmsg_ctl00_lbl_tagline">Message By <b><asp:Label ID="lbl_user_t" runat="server" Text='<%# Eval("cargo2").ToString()=="Admin" ? "You" : Eval("cargo2") %>'></asp:Label></b>
on <asp:Label ID="lbldatetime" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"cargo1","{0:ddd, dd MMMM yyyy}")%>'/></span></td>
</tr>
<tr>
<td class="header">
</td>
<td class="normaltext" valign="bottom">
<b>Message :</b><br>
<span id="ctl00_ContentPlaceHolder1_dl_ticketmsg_ctl00_Label1"><asp:Label ID="lbl_inquiry_desc" runat="server" Text='<%#Eval("body")%>'/></span></td>
</tr>
<tr>
<td class="header">
</td>
<td class="normaltext" valign="bottom">
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</div>
</ItemTemplate>
<SeparatorTemplate>
<table>
<tr>
<td style="background-color:White;width:5px;">
<span id="Label2"></span>
</td></tr>
</table>
</SeparatorTemplate>
</asp:Repeater>
答案 0 :(得分:1)
我将回到我的架构(related question) - 纯粹因为它比我试图用数据等重现你的更快,但希望这会有所帮助(你只需要映射它回到你的结构)。这个答案可能会严重下降 - 因为它没有回答提出的问题 - 但建议一种方法来避免所需的复杂绑定(现在已经看到了如何使用存储过程的输出)。 p>
如果你的架构是这样的: -
create table tbl_Inquiry_master (
id int,
body varchar(1024)
);
create table tbl_Inquiry_history (
id int,
inquiry_id int,
body varchar(1024)
);
create table tbl_question (
id int,
inquiry_id int,
body varchar(1024)
);
create table tbl_answer (
id int,
question_id int,
body varchar(1024)
);
insert into tbl_Inquiry_master values (1, 'inquiry one');
insert into tbl_Inquiry_master values (2, 'inquiry two');
insert into tbl_Inquiry_master values (3, 'inquiry three');
insert into tbl_Inquiry_master values (4, 'inquiry four');
insert into tbl_Inquiry_history values (1, 1,'history 1 (relates to inquiry 1)');
insert into tbl_Inquiry_history values (2, 3,'history 2 (relates to inquiry 3)');
insert into tbl_question values (1,1,'inquiry one question one')
insert into tbl_question values (2,1,'inquiry one question two')
insert into tbl_question values (3,2,'inquiry two question one')
insert into tbl_question values (4,4,'inquiry four question one')
insert into tbl_answer values (1,1,'answer 1 to question 1')
insert into tbl_answer values (2,1,'answer 2 to question 1')
insert into tbl_answer values (3,2,'answer 1 to question 2')
insert into tbl_answer values (4,4,'answer 1 to question 4')
insert into tbl_answer values (5,4,'answer 2 to question 4')
insert into tbl_answer values (6,4,'answer 3 to question 4')
你可以有这样的存储过程: -
create procedure [dbo].[ViewMessageThreads] (
@inquiry_id int)
AS
BEGIN
create table #return (
FromTable varchar(10),
sort1 int,
sort2 int,
sort3 int,
body varchar(1024),
cargo1 datetime,
cargo2 varchar(50)
)
insert into #return
select 'master', 1, 0, 0, m.body , null, null
from tbl_Inquiry_master m
where m.id=@inquiry_id
insert into #return
select 'history', 2, 0, 0, h.body , null, null
from tbl_Inquiry_history h
where h.inquiry_id=@inquiry_id
insert into #return
select 'question', 3, q.id, 0, q.body , GETDATE(), 'user'
from tbl_question q
where q.inquiry_id=@inquiry_id
insert into #return
select 'answer', 3, q.id, a.id, a.body , GETDATE(), 'staff'
from tbl_answer a
join tbl_question q on q.id=a.question_id
where q.inquiry_id=@inquiry_id
/*
-- uncomment this block to update the type in the way you appear
-- to want it set, I'm leaving it commented in my answer as I
-- cannot confirm the logic works - as I don't have your schema/data
-- and the code is, therefore, untested.
-- this logic could be moved to the top of the SP and the variable could be
-- substituted into each SELECT, so that the UPDATE would then not be required
declare @Type_name = @varchar(50) -- I don't know the dimensions of this type
select top 1 @Type_name=t.Type_name
from tbl_Type t
join tbl_Login_master l on l.Id=t.Id
join tbl_User_master u on u.Id=l.Id
join tbl_Inquiry_History h on h.User_id=u.Id
where (h.Inquiry_id=@inquiry_id))
update #return set cargo2=@Type_name
*/
select *
from #return
order by sort1, sort2, sort3
end
并将其称为: -
exec [dbo].[ViewMessageThreads] 1
exec [dbo].[ViewMessageThreads] 2
exec [dbo].[ViewMessageThreads] 3
exec [dbo].[ViewMessageThreads] 4
会产生: -
这会产生更容易绑定的输出,而不是你问题中SP的输出。
您可以使用fromtable和sort列中的值在转发器中决定如何格式化其他列。
你将不得不玩弄货物槽(你可能需要更多)和排序顺序 - 因为我不知道你想从历史/主表中输出任何输出。希望这会引导你朝着正确的方向前进。