簡體   English   中英

ADO.net如何使用C#和連接的模型在頁面加載時將特定數據庫表單元格中的數據綁定到轉發器控件上?

[英]ADO.net how to bind data from specific database table cell to a repeater control on page load using C# & the connected model?

我想使用C#,ADO.NET和連接的模型將oracle數據庫單元中的數據綁定到轉發器控件中的一堆標簽。 顯示頁面中繼器是這樣的(為簡單起見,這只是一個評估):

<asp:Repeater ID="rptMain" runat="server" >
   <ItemTemplate>
     <h3 id="contactUs"> <%#Eval("ppCustSurvey")%> %></h3>
   </ItemTemplate>
</asp:Repeater>

現在,屬性字符串“ ppCustSurvey”是在我的屬性類ppContent中的屬性。 在頁面后面的代碼中,我將此作為頁面加載的一部分

if (!Page.IsPostBack)
{
    clsContent objCon = new clsContent();
    rptMain.DataSource = objCon.getContent();
    rptMain.DataBind();
}

而getContent()方法指向此

public class clsContent
{
    static readonly string _strConn;

    static clsContent()
    {
        _strConn = WebConfigurationManager.ConnectionStrings["MyDilbert_Nov30"].ConnectionString;
    }
    public List<ppContent> getContent()
    {
        List<ppContent> objAllContent = new List<ppContent>();
        OracleConnection conn = new OracleConnection(_strConn);
        try
        {
            conn.Open();
            string strCmd = "Select site_content from content";
            OracleCommand cmd = new OracleCommand(strCmd, conn);
            OracleDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                ppContent objCon = new ppContent();
                objCon.ppCustSurvey = (dr["site_content"].ToString());
            }
            return objAllContent;
        }
        catch(Exception)
        {
            objAllContent.Clear();
            return objAllContent;
        }
        finally{
            conn.Close();
        }
    }
}

現在,我認為我需要傳遞列id的參數,以將ppCustSurvey標識為PK等於1的列。我該如何做?

我會將解決方案發布給任何認為有用的人。 我通過將以下代碼添加到我的課程中解決了該問題:

    public List<ppControls> getControls(int _id)
{
    List<ppControls> objAllControls = new List<ppControls>();
    OracleConnection conn = new OracleConnection(_strConn);
    OracleCommand cmd = new OracleCommand("SELECT * FROM controls WHERE reference =: parID", conn);
    cmd.Parameters.AddWithValue(":parID", _id);
    try
    {
        conn.Open();
        //string strCmd = parSelect;
        //OracleCommand cmd = new OracleCommand(strCmd, conn);
        OracleDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {                objCon.ppCustSurvey = dr["controls_content"].ToString();}
        return objAllControls;
    }

然后在后面的代碼中,我像這樣傳遞外鍵的參數

        rptMain.DataSource = objCon.getControls(7);
        rptMain.DataBind();

這是針對每個中繼器完成的。 我創建了一個帶有get和set的ppCustSurvey屬性類,並在顯示頁面上將屬性名稱分配給了轉發器的Eval函數。 無論如何,這就是我解決的方法。 現在,我很好奇您將以何種方式減輕服務器上的負擔,但這是另一個問題。

如果您打算從數據庫中將大量數據收集到一系列這樣的標簽中,那么我懷疑您的DBA可能會對重復敲打數據庫提出質疑(即每次打開連接並為每個標簽執行select語句)頁面呈現),尤其是在這是一個人流量大的網站時。

在這種情況下,我們通常會一口氣從數據庫中獲取所有必要的數據,並在后台代碼中動態生成所需的HTML。 這可能需要更多的工作,但是它應該更快,並且對數據庫的影響也要小得多。

如果您要堅持當前的設計,我們將需要查看如何在客戶端定義列的PK,但這就像在ppCustSurvey方法中添加參數一樣簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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