【问题标题】:How to dynamically populate a RadioButtonList from the database within a Repeater control如何从 Repeater 控件中的数据库动态填充 RadioButtonList
【发布时间】:2017-07-07 14:12:57
【问题描述】:

这是我第一次尝试从 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>

但是,我遇到了错误:

“object”不包含“openDataset”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“openDataset”(您是否缺少 using 指令或程序集引用?

有什么想法吗?

更新:

    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();

【问题讨论】:

    标签: c# asp.net repeater


    【解决方案1】:

    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 中 RadioButton 的 ID 是 rblPurchaseType 并且您在 radioatt 上使用 FindControl,请确保它们相同。

    【讨论】:

    • 非常感谢您的及时回复。请进一步帮助我,因为我没有做对。遇到各种错误。我已经更新了上面的代码。
    • 除了Repeater2.FindControl 之外看起来还可以。如果在 ItemDataBound 事件中使用,则需要使用 e.Row.FindControl。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2017-05-02
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多