[英]Is it possible to put a control in another control?
我問這個問題是因為我從Exchange Server訪問郵件。 郵件的正文包含HTML。 為了顯示郵件的正文,我使用了FreeTextBox控件。 但是我有很多郵件,我首先在gridview中顯示。 但是問題是正文中的HTML也顯示在gridview單元中。 是否可以將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>
是的,您可以這樣做。 在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將在顯示所有文本之前對其進行HtmlEncode。
編輯2注意我設置了AutoGenerateColumns="false"
並添加了三列。 我省略了消息ID,但是您可以通過添加另一個BoundField像已經存在的ID一樣將其重新添加。
<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>
是的,您可以使用模板字段在gridview中顯示任何內容: http : //msdn.microsoft.com/zh-cn/library/bb288032.aspx
是的,您應該能夠在網格視圖的單元格中為網格中的每一行添加一個控件。 您需要提供有關如何構建gridview的更多信息,然后我們才能提供進一步的幫助。 我們可以看一些例子嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.