0

我有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">
                                                &nbsp;</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">
                                                &nbsp;</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">
                                                &nbsp;</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">
                                                &nbsp;</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">
                                                &nbsp;</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>
4

1 回答 1

1

I'm going to go back to my schema (related question) - purely because it's quicker for me than trying to reproduce yours with data, etc. but hopefully this will help (You'll just have to map it back onto your structures). This answer may get heavily down voted - as it does not answer the question posed - but suggests a way to avoid the complex binding that would be required (having now seen how the output of the stored procedure is going to be used).

If your schema was like this:-

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')

You could have a stored procedure like this:-

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

and calling it like:-

exec [dbo].[ViewMessageThreads] 1
exec [dbo].[ViewMessageThreads] 2
exec [dbo].[ViewMessageThreads] 3
exec [dbo].[ViewMessageThreads] 4

which would produce:-

out from call to SP which would produce output that should be easier for you to bind onto, rather than that output by the SP in your question.

You can use the values in the fromtable and sort columns to make decisions in your repeater about how to format the other columns.

You'll have to play around with populating the cargo slots (you may need more) and the sort order - as I'm not sure where/whether you want any output from the History/Master tables. Hopefully this will head you in the right direction.

于 2013-10-25T18:48:07.593 回答