2011-03-08 112 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的信息。我們可以看到一些例子嗎?

相關問題