簡體   English   中英

是否可以將一個控件放在另一個控件中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM