2011-03-08 62 views
0

我在问这是因为我从Exchange Server访问邮件。邮件正文包含HTML。要显示邮件的正文,我使用FreeTextBox控件。但我有很多邮件,我首先在gridview中显示。但问题是在网格视图单元格中显示的正文中的HTML。是否有可能把一个FreeTextBox的GridView的每个记录?是否可以将控件放入另一个控件中?

欢迎任何帮助

这是我使用绑定代码/等

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(); 
    } 

这是设计视图代码:

<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> 
+0

我们需要更深入。我们可以在控件内创建一个控件吗? – mquander 2011-03-08 14:29:33

+0

Tassisto:看到我更新的答案。 – Peter 2011-03-08 14:40:20

+0

@Patricker我怎样才能完全隐藏一个列,但仍然检索它的值? – SamekaTV 2011-03-11 07:29:39

回答

3

是的,你可以做到这一点。在GridView中使用TemplateField,然后将FreeTextBox控件放在ItemTemplate或EditTemplate中(可能只是编辑模板)。

像这样的:

 <asp:TemplateField HeaderText="HTML Content"> 
      <ItemTemplate> 
       <asp:Label ID="lblText" runat="server" Text='<% Eval("") %>' /> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <FTB:FreeTextBox id="ftbTest" runat="server" Text='<% Bind("") %>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 

编辑

你甚至需要使用FreeTextBox?也许你只需要在你的BoundField上设置HtmlEncode="false"(如果你使用的话)。默认情况下,出于安全原因,GridView会在显示之前对所有文本进行编码。

编辑2 注意我设置了AutoGenerateColumns="false"并添加了三列。我省略了消息ID,但是您可以通过添加另一个BoundField(如已有的BoundField)将其添加回来。

<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" AutoGenerateColumns="false"> 
     <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" /> 
     <Columns> 
      <asp:BoundField HeaderText="Subject" DataField="Subject" /> 
      <asp:BoundField HeaderText="Body" DataField="Body" HtmlEncode="false" /> 
      <asp:BoundField HeaderText="Sent" DataField="Sent" /> 
     </Columns> 
    </asp:GridView> 
+0

@Massimo Tassisto:你可以发布你的GridView设计器代码吗? – Peter 2011-03-08 14:46:31

+0

你见过代码吗?我直接将数据绑定到我的gridview编程。所以我不认为这会起作用 – SamekaTV 2011-03-08 14:47:31

+1

它会工作,只需发布​​您的GridView设计器代码。 – Peter 2011-03-08 14:51:25

0

是的,你应该能够为网格中的每一行在网格视图的单元格中添加一个控件。在我们可以进一步提供帮助之前,您需要提供更多关于如何构建gridview的信息。我们可以看到一些例子吗?

相关问题