2017-07-07 38 views
0

這是我第一次嘗試從Repeater控件中動態填充RadioButtonList。到目前爲止,情況並不理想。如何在Repeater控件中動態填充數據庫中的RadioButtonList

我想這個代碼,我發現在這裏,理應爲它是誰寫的傢伙的工作:

protected void fillRepeater_onitembound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     sql = "select PurchaseTypeID,PurchaseType from PurchaseType"; 
     object obj = null; 
     ds = obj.openDataset(sql); 
     ListItem li; 

     RadioButtonList rbtl = (RadioButtonList)e.Item.FindControl("radioatt"); 
     if (rbtl != null) 
     { 
      for (int i = 0; i < dt.Rows.Count; i++) 
      { 
       li = new ListItem(); 
       li.Text = dt.Rows[i]["PurchaseType"].ToString(); 
       li.Value = dt.Rows[i]["PurchaseTypeID"].ToString(); 
       rbtl.Items.Add(li); 
      } 
     } 
    } 
} 

<asp:Repeater ID="Repeater2" runat="server" OnItemDataBound="fillRepeater_onitembound"> 
    <ItemTemplate> 
    <table style="width:100%;border: 1px solid black;"> 
     <tr> 
      <td style="width:50%;border-collapse: collapse;border: 1px solid black;"> 
      Purchased:<asp:radiobuttonlist ID="rblPurchaseType" runat="server" RepeatDirection="Horizontal" TextAlign="Right" style="display:inline;"></asp:radiobuttonlist></td> 
       <td style="text-align:center;border: 1px solid black;"> 
      </td> 
     </tr> 
     <tr> 
    </table> 
    ... 
    ... 
    ... 
    </asp:Repeater> 

不過,我遇到了錯誤:

「對象」不包含'openDataset'的定義並且沒有擴展方法'openDataset'接受'object'類型的第一個參數可以找到(你是否缺少使用指令或程序集引用?

任何想法有什麼問題嗎?

UPDATE:

public DataTable LoadDataFromDatabase(string query) 
    { 
     DataTable dt = new DataTable(); 

     using (SqlConnection connection = new SqlConnection(connStr)) 
     using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection)) 
     { 
      try 
      { 
       adapter.Fill(dt); 
      } 
      catch (Exception ex) 
      { 
       //handle error if needed 
      } 
     } 

     return dt; 
    } 
    string myQuery = "SELECT PurchaseTypeID, PurchaseType FROM PurchaseType ORDER BY PurchaseType"; 
    string rbtl = Repeater2.FindControl("rblPurchaseType"); 
    rbtl.DataSource = LoadDataFromDatabase(myQuery); 
    rbtl.DataTextField = "PurchaseType"; 
rbtl.DataValueField = "PurchaseTypeID"; 
rbtl.DataBind(); 

回答

0

到底是什麼obj?除非你把它迴歸到擁有openDataset屬性的東西,否則這絕不會奏效。

我用的是從查詢返回DataTable並綁定該到RadioButtonList

public DataTable LoadDataFromDatabase(string query) 
{ 
    DataTable dt = new DataTable(); 

    using (SqlConnection connection = new SqlConnection(YourConnectionString)) 
    using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection)) 
    { 
     try 
     { 
      adapter.Fill(dt); 
     } 
     catch (Exception ex) 
     { 
      //handle error if needed 
     } 
    } 

    return dt; 
} 

一個簡單的方法,現在你可以使用這個方法來快速和簡單的從數據庫中獲取和綁定您需要的內容它無論你需要什麼控制。

string myQuery = "SELECT PurchaseTypeID, PurchaseType FROM PurchaseType ORDER BY PurchaseType"; 

rbtl.DataSource = LoadDataFromDatabase(myQuery); 
rbtl.DataTextField = "PurchaseType"; 
rbtl.DataValueField = "PurchaseTypeID"; 
rbtl.DataBind(); 

PS rbtl總是會在你的情況null由於單選按鈕在ASPX ID是rblPurchaseType,並且使用的FindControl上radioatt,確保這些是相同的。

+0

非常感謝您的及時回覆。請幫助我進一步,因爲我沒有得到正確的。 遇到各種錯誤。我已經更新了上面的代碼。 – Kenny

+0

除了'Repeater2.FindControl'之外,它看起來很好。如果你在ItemDataBound事件中使用它,你需要使用e.Row.FindControl。 – VDWWD