Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I ended up creating my own user control. If anyone is interested message and I'll post the details.</p> <p>Edit:</p> <p>Ok I didn't realize I wrote so much. Make sure you credit Biff_MaGriff if you use this. :D Tech is .net 3.5 with SubSonic 3.0</p> <p>Should look like this in the end.</p> <p>Hmm, can't post over 30k characters...</p> <p>Continued from above.</p> <p>~/UserControls/Messages/MessageFolder/MessageFolder.ascx.cs</p> <pre><code>using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class UserControls_Messages_MessageFolder_MessageFolder : System.Web.UI.UserControl, IMessageFolder { private static int IDCOLUMNINDEX = 0; private static int DELETECOLUMNINDEX = 1; private static int FROMCOLUMNINDEX = 2; private static int TOCOLUMNINDEX = 3; public event SelectedIndexChangedEventHandler SelectedIndexChanged; public delegate void SelectedIndexChangedEventHandler(object sender, EventArgs e); public event ComposeMessageEventHandler ComposeMessage; public delegate void ComposeMessageEventHandler(object sender, Common.MessageComposeEventArgs e); VAC.Data.VACDB db = new VAC.Data.VACDB(); public int? MessageID { get { int id; if (int.TryParse(hfMessageID.Value, out id)) return id; else return null; } } public CustomDataViews.MessageQuery.MailType MailType { get; set; } protected void Page_Load(object sender, EventArgs e) { if (MailType == CustomDataViews.MessageQuery.MailType.SentMail) { butCompose.Visible = false; } Refresh(); } public void Refresh() { gvMessages.DataSource = new CustomDataViews.MessageQuery().GetMessages(MailType, cbShowDeleted.Checked); gvMessages.DataBind(); Common.HideColumn(gvMessages, IDCOLUMNINDEX); if (MailType == CustomDataViews.MessageQuery.MailType.ReceivedMail) Common.HideColumn(gvMessages, TOCOLUMNINDEX); else Common.HideColumn(gvMessages, FROMCOLUMNINDEX); } protected void gvMessages_RowDataBound(object sender, GridViewRowEventArgs e) { Common.GridView_RowDataBound(sender, e); if (e.Row.RowType == DataControlRowType.DataRow) { CustomDataViews.MessageQuery.Message dataItem = ((CustomDataViews.MessageQuery.Message)e.Row.DataItem); if (dataItem.IsDeletedSender &amp;&amp; MailType == CustomDataViews.MessageQuery.MailType.SentMail || dataItem.IsDeletedRecipient &amp;&amp; MailType == CustomDataViews.MessageQuery.MailType.ReceivedMail) { foreach (TableCell tc in e.Row.Cells) tc.Enabled = false; e.Row.Cells[DELETECOLUMNINDEX].Enabled = true; ((LinkButton)e.Row.Cells[DELETECOLUMNINDEX].Controls[0]).Text = "Undelete"; ((LinkButton)e.Row.Cells[DELETECOLUMNINDEX].Controls[0]).Attributes.Clear(); } if (!dataItem.IsRead &amp;&amp; MailType == CustomDataViews.MessageQuery.MailType.ReceivedMail) { //colouring for initial load if ((e.Row.RowState &amp; DataControlRowState.Alternate) == DataControlRowState.Alternate) e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml(Common.BGColourGreenAlternate); else e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml(Common.BGColourGreen); //colouring for onmouse out Common.ApplyStylingToRow(e.Row, Common.SelectedBGColour(sender), Common.BGColourGreen, Common.BGColourGreenAlternate); } } if (ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack &amp;&amp; e.Row.RowType == DataControlRowType.DataRow) Common.GridViewAddRowClick(gvMessages, e.Row, false); } protected void gvMessages_SelectedIndexChanged(object sender, EventArgs e) { hfMessageID.Value = gvMessages.SelectedValue != null ? gvMessages.SelectedValue.ToString() : ""; if (MailType == CustomDataViews.MessageQuery.MailType.ReceivedMail) { var mess = (from m in db.Messages where m.MessageID == MessageID.Value select m); if (mess.Count() == 1) { var message = mess.First(); message.IsRead = true; message.Save(); } } if (this.SelectedIndexChanged != null) SelectedIndexChanged(this, new EventArgs()); this.Refresh(); } protected void gvMessages_RowDeleting(object sender, GridViewDeleteEventArgs e) { int id; if (int.TryParse(((GridView)sender).Rows[e.RowIndex].Cells[IDCOLUMNINDEX].Text, out id)) { var message = (from m in db.Messages where m.MessageID == id select m).First(); if (!message.IsDeletedRecipient &amp;&amp; MailType == CustomDataViews.MessageQuery.MailType.ReceivedMail) message.IsDeletedRecipient = true; else message.IsDeletedRecipient = false; message.Save(); if (!message.IsDeletedSender &amp;&amp; MailType == CustomDataViews.MessageQuery.MailType.SentMail) message.IsDeletedSender = true; else message.IsDeletedSender = false; message.Save(); gvMessages.SelectedIndex = -1; gvMessages_SelectedIndexChanged(gvMessages, new EventArgs()); } Refresh(); } protected override void Render(HtmlTextWriter writer) { Common.GridViewRowClick_Render(gvMessages); base.Render(writer); } protected void butCompose_Click(object sender, EventArgs e) { if (this.ComposeMessage != null) { this.ComposeMessage(this, new Common.MessageComposeEventArgs()); } } protected void cbShowDeleted_CheckChanged(object sender, EventArgs e) { Refresh(); } } </code></pre> <p>MessageCompose.ascx</p> <pre><code>&lt;%@ Control Language="C#" AutoEventWireup="true" CodeFile="MessageCompose.ascx.cs" Inherits="UserControls_Messages_MessageCompose_MessageCompose" %&gt; &lt;div&gt; &lt;table style="width: 100%;"&gt; &lt;tr&gt; &lt;td&gt; &lt;asp:Label ID="Label1" runat="server" Text="To :" /&gt; &lt;/td&gt; &lt;td style="width:100%"&gt; &lt;asp:DropDownList ID="ddlToUser" runat="server" AppendDataBoundItems="true" DataSourceID="odsUsers" DataTextField="UserName" DataValueField="UserID"&gt; &lt;asp:ListItem Text="--Select--" Value="" /&gt; &lt;/asp:DropDownList&gt; &lt;asp:ObjectDataSource ID="odsUsers" runat="server" SelectMethod="GetUsers" TypeName="CustomDataViews+UserListQuery"&gt; &lt;/asp:ObjectDataSource&gt; &lt;asp:RequiredFieldValidator ID="rfv1" runat="server" Text="*" ControlToValidate="ddlToUser" ValidationGroup="Compose" /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;asp:Label ID="Label2" runat="server" Text="Subject :" /&gt; &lt;/td&gt; &lt;td style="padding: 1px 5px 1px 1px"&gt; &lt;asp:TextBox ID="tbSubject" runat="server" Width="100%" /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td colspan="2" style="padding: 1px 5px 1px 1px"&gt; &lt;asp:TextBox ID="tbBody" runat="server" TextMode="MultiLine" Style="width: 100%" Rows="20" /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td colspan="2"&gt; &lt;table width="100%"&gt; &lt;tr&gt; &lt;td align="center"&gt; &lt;asp:Label ID="lblMessageSentText" runat="server" Text="Your message was sent." CssClass="info" Visible="false" /&gt; &lt;/td&gt; &lt;td align="right"&gt; &lt;asp:Button ID="butSend" runat="server" Text="Send" OnClick="butSend_Click" ValidationGroup="Compose" /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt; </code></pre> <p>MessageCompose.ascx.cs</p> <pre><code>using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using VAC.Data; public partial class UserControls_Messages_MessageCompose_MessageCompose : System.Web.UI.UserControl { public event MessageSentEventHandler MessageSent; public delegate void MessageSentEventHandler(object sender, EventArgs e); public int? SendToUserID { set { if (ddlToUser.Items.FindByValue(value.HasValue ? value.Value.ToString() : "") != null) ddlToUser.SelectedValue = value.HasValue ? value.Value.ToString() : ""; else Common.RegisterStartupScript(this, "alert('Error : You are unauthorized to respond to this message.');"); } } public string SendToSubject { set { tbSubject.Text = "RE: " + value; } } protected void Page_Load(object sender, EventArgs e) { lblMessageSentText.Visible = false; } private static string SENTMESSAGETEXT = "Your message was sent at {0} to {1}."; protected void butSend_Click(object sender, EventArgs e) { Message m = new Message(); m.Body = tbBody.Text; m.FromUserID = Common.CurrentUserID; m.IsRead = false; m.SentDate = DateTime.Now; m.Subject = tbSubject.Text; int tid; if (int.TryParse(ddlToUser.SelectedValue, out tid)) m.ToUserID = tid; m.Save(); lblMessageSentText.Text = string.Format(SENTMESSAGETEXT, DateTime.Now.ToString(), ddlToUser.SelectedItem.Text); lblMessageSentText.Visible = true; ddlToUser.SelectedValue = null; tbSubject.Text = ""; tbBody.Text = ""; if (this.MessageSent != null) MessageSent(this, new EventArgs()); } } </code></pre> <p>MessageView.ascx</p> <pre><code>&lt;%@ Control Language="C#" AutoEventWireup="true" CodeFile="MessageView.ascx.cs" Inherits="UserControls_Messages_MessageView_MessageView" %&gt; &lt;asp:HiddenField ID="hfMessageID" runat="server" /&gt; &lt;div style="border-style: solid;"&gt; &lt;div style="font-size: x-large; padding: 10px 10px 10px 10px;"&gt; &lt;asp:Label ID="lblSubject" runat="server" Text='&lt;%# Bind("Subject") %&gt;' /&gt;&lt;/div&gt; &lt;div style="background-color: lightblue;"&gt; &lt;table&gt; &lt;tr&gt; &lt;td&gt; &lt;asp:Label ID="Label1" runat="server" Text="From :" /&gt; &lt;/td&gt; &lt;td&gt; &lt;asp:Label ID="lblFromUser" runat="server" Text='&lt;%# Bind("FromUser") %&gt;' /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;asp:Label ID="Label2" runat="server" Text="To :" /&gt; &lt;/td&gt; &lt;td&gt; &lt;asp:Label ID="lblToUser" runat="server" Text='&lt;%# Bind("ToUser") %&gt;' /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;asp:Label ID="Label3" runat="server" Text="Sent :" /&gt; &lt;/td&gt; &lt;td&gt; &lt;asp:Label ID="lblSentDate" runat="server" Text='&lt;%# Bind("SentDate") %&gt;' /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt; &lt;div style="padding: 10px 10px 10px 10px"&gt; &lt;asp:Label ID="lblBody" runat="server" Text='&lt;%# Bind("Body") %&gt;' /&gt; &lt;/div&gt; &lt;div style="padding: 10px 10px 10px 10px"&gt; &lt;asp:LinkButton ID="lbReply" runat="server" Text="Reply" onclick="lbReply_Click" /&gt;&lt;/div&gt; &lt;/div&gt; </code></pre> <p>MessageView.ascx.cs</p> <pre><code>using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class UserControls_Messages_MessageView_MessageView : System.Web.UI.UserControl { public event ComposeMessageEventHandler ComposeMessage; public delegate void ComposeMessageEventHandler(object sender, Common.MessageComposeEventArgs e); public int? MessageID { get { int mid; return int.TryParse(hfMessageID.Value, out mid) ? mid : new int?(); } set { hfMessageID.Value = (value.HasValue) ? value.ToString() : ""; BindMessageView(); } } private void BindMessageView() { if (MessageID.HasValue) { CustomDataViews.MessageQuery.Message message = new CustomDataViews.MessageQuery().GetMessage(MessageID.Value); this.Visible = true; lblBody.Text = message.Body; lblFromUser.Text = message.FromUser; lblSentDate.Text = message.SentDate.ToString(); lblSubject.Text = message.Subject; lblToUser.Text = message.ToUser; } else { this.Visible = false; lblBody.Text = ""; lblFromUser.Text = ""; lblSentDate.Text = ""; lblSubject.Text = ""; lblToUser.Text = ""; } } protected void Page_Load(object sender, EventArgs e) { } protected void lbReply_Click(object sender, EventArgs e) { var mess = (from m in new VAC.Data.VACDB().Messages where m.MessageID == MessageID select m); if (mess.Count() == 1) { if (this.ComposeMessage != null) this.ComposeMessage(this, new Common.MessageComposeEventArgs(mess.First().FromUserID, mess.First().Subject)); } } } </code></pre> <p>MessageBox.ascx</p> <pre><code>&lt;%@ Control Language="C#" AutoEventWireup="true" CodeFile="MessageBox.ascx.cs" Inherits="UserControls_Messages_MessageBox_MessageBox" %&gt; &lt;asp:UpdatePanel ID="up1" runat="server"&gt; &lt;ContentTemplate&gt; &lt;h1&gt; Message Inbox&lt;/h1&gt; &lt;cc:MessageFolder ID="mf1" runat="server" MailType="ReceivedMail" OnSelectedIndexChanged="SelectedMessageChanged" OnComposeMessage="ComposeMessage" /&gt; &lt;h2&gt; Sent Messages&lt;/h2&gt; &lt;cc:MessageFolder ID="mf2" runat="server" MailType="SentMail" OnSelectedIndexChanged="SelectedMessageChanged" /&gt; &lt;br /&gt; &lt;cc:MessageView ID="mv1" runat="server" OnComposeMessage="ComposeMessage" /&gt; &lt;br /&gt; &lt;cc:MessageCompose ID="mc1" runat="server" OnMessageSent="mc1_MessageSent" /&gt; &lt;/ContentTemplate&gt; &lt;/asp:UpdatePanel&gt; </code></pre> <p>MessageBox.ascx.cs</p> <pre><code>using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class UserControls_Messages_MessageBox_MessageBox : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { mv1.MessageID = mf1.MessageID; mc1.Visible = false; } } protected void SelectedMessageChanged(object sender, EventArgs e) { mv1.MessageID = ((IMessageFolder)sender).MessageID; mc1.Visible = false; } protected void ComposeMessage(object sender, Common.MessageComposeEventArgs e) { mc1.Visible = true; mc1.DataBind(); if (e.SendToUserID.HasValue) mc1.SendToUserID = e.SendToUserID; if (!string.IsNullOrEmpty(e.Subject)) mc1.SendToSubject = e.Subject; } protected void mc1_MessageSent(object sender, EventArgs e) { mf2.Refresh(); } } </code></pre> <p>Messages.aspx</p> <pre><code>&lt;%@ Page Title="" Language="C#" MasterPageFile="~/Templates/Patient.master" AutoEventWireup="true" CodeFile="Messages.aspx.cs" Inherits="UI_Patient_Messages" %&gt; &lt;asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"&gt; &lt;cc:MessageBox ID="mi1" runat="server" /&gt; &lt;/asp:Content&gt; </code></pre> <p>Messages.aspx.cs</p> <pre><code>using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class UI_Patient_Messages : BasePage { protected void Page_Load(object sender, EventArgs e) { } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload