I’m asking this because I access mails from Exchange Server. The body of the mails contains HTML. To display the mails’ body I use a FreeTextBox Control. But I have a lot mails which I firstly show in a gridview. But the problem is the HTML in the body which also is shown in the gridview cells. Is it possible to put a FreeTextBox in each record of the gridview???
Any help is welcome
this is the code I use to bind/etc
private DataTable dt;
private ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
dt = new DataTable();
MakeDataTable();
ConnectToExchange();
DoorloopMailbox();
BindGrid();
}
else
{
dt = (DataTable)ViewState["DataTable"];
}
ViewState["DataTable"] = dt;
//service.TraceEnabled = true; --om te traceren.
}
private void ConnectToExchange()
{
service.Credentials = new NetworkCredential("user", "pass", "domain.com");
service.Url = new Uri("Uri");
}
private void DoorloopMailbox()
{
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox,
new ItemView(100));
foreach (Item item in findResults.Items)
{
item.Load();
DataRow dr = dt.NewRow();
dr["OutlookID"] = item.Id.UniqueId;
//dr["Sender"] = item.
dr["Subject"] = item.Subject;
string processedInput;
string omschrijving = item.Body;
if (omschrijving != null)
{
processedInput = Regex.Replace(omschrijving, @"<(.|\n)*?>", string.Empty);
}
else
{
processedInput = "geen omschrijving";
}
dr["Body"] = processedInput;
dr["Sent"] = item.DateTimeSent;
dt.Rows.Add(dr);
}
}
private void BindGrid()
{
gvAanvragen.DataSource = dt;
gvAanvragen.DataBind();
}
private void MakeDataTable()
{
dt.Columns.Add("OutlookID");
dt.Columns.Add("Sender");
dt.Columns.Add("Subject");
dt.Columns.Add("Body");
dt.Columns.Add("Sent");
}
protected void GvMeldingen_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Redirect("Detailscherm.aspx?melder=" + Server.UrlEncode(gvMeldingen.SelectedRow.Cells[3].Text)
+ "&datum=" + gvMeldingen.SelectedRow.Cells[6].Text
+ "&onderwerp=" + Server.UrlEncode(gvMeldingen.SelectedRow.Cells[4].Text)
+ "&id=" + Server.UrlEncode(gvMeldingen.SelectedRow.Cells[1].Text)
+ "&omschrijving=" + Server.UrlEncode(gvMeldingen.SelectedRow.Cells[5].Text));
}
protected void Button1_Click(object sender, EventArgs e)
{
}
protected void GvAanvragen_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvAanvragen.PageIndex = e.NewPageIndex;
BindGrid();
}
this is the code in designer view:
<asp:GridView ID="gvAanvragen"
OnPageIndexChanging="GvAanvragen_PageIndexChanging" runat="server" AllowPaging="True"
AllowSorting="True" BackColor="White" BorderColor="#DEDFDE" BorderStyle="None"
BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Vertical"
PageSize="5">
<RowStyle BackColor="#F7F7DE" />
<FooterStyle BackColor="#CCCC99" />
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
Yes, you can do this. Use a TemplateField in your gridview, then put the FreeTextBox control inside of your ItemTemplate or EditTemplate (probably just edit template).
Kind of like this:
EDIT
Do you even need to use FreeTextBox? Maybe you just need to set
HtmlEncode="false"on your BoundField (if your using one). By default the GridView will HtmlEncode all text before displaying it, for security reasons.EDIT 2
Note I set
AutoGenerateColumns="false"and added the three columns. I left out the message id, but you can add it back in by adding another BoundField like the ones already there.