c# - Datalist 控件 : binding with ADO. NET 对象

标签 c# asp.net data-binding

代码如下:

private void ShowPossiblePurchases(string CategoryName)
{

    string selectSQL = "SELECT TOP 2 * FROM Menu WHERE CategoryName=@CategoryName ORDER BY NEWID()";
    SqlCommand cmd = new SqlCommand(selectSQL, connection);
    cmd.Parameters.AddWithValue("@CategoryName", CategoryName);
    SqlDataReader reader;

    DataSet myDataSet = new DataSet();
    myDataSet.Tables.Add("Products");


    myDataSet.Tables["Products"].Columns.Add("ProductID");
    myDataSet.Tables["Products"].Columns.Add("CategoryID");
    myDataSet.Tables["Products"].Columns.Add("ProductName");
    myDataSet.Tables["Products"].Columns.Add("Price");

    DataList DataList1 = (DataList)lgnView.FindControl("DataList1");

    try
    {
        connection.Open();
        reader = cmd.ExecuteReader();

        while (reader.Read())
        {

            DataRow rowNew = myDataSet.Tables["Products"].NewRow();
            rowNew["ProductID"] = reader["ProductID"];
            rowNew["CategoryID"] = reader["CategoryID"];
            rowNew["ProductName"] = reader["ProductName"];
            rowNew["Price"] = reader["Price"];
            myDataSet.Tables["Products"].Rows.Add(rowNew);
        }

        DataList1.DataSource = myDataSet.Tables["Products"];
        DataList1.DataBind();
    }
    catch(Exception ex)
    {
        Label lblError = (Label)lgnView.FindControl("lblError");
        lblError.Text = ex.Message;
    }
    finally
    {
        connection.Close();
    }
}

当我运行它时,没有任何反应。我做错了什么?

最佳答案

我已经在我这边重新创建了上面的代码并且它工作得很好。 因为您没有提供 DataList 的来源,所以我坚信问题出在您没有正确绑定(bind) DataList 中的数据。

下面是一个关于如何做到这一点的例子:

<asp:DataList ID="DataList1" runat="server">
    <HeaderTemplate>
        <table>
            <tr>
                <td>
                    ProductID
                </td>
                <td>
                    CategoryID
                </td>
                <td>
                    ProductName
                </td>
                <td>
                    Price
                </td>
            </tr>
        </table>
    </HeaderTemplate>
    <ItemTemplate>
        <table>
            <tr>
                <td>
                    <%# DataBinder.Eval(Container.DataItem, "ProductID")%>
                </td>
                <td>
                    <%# DataBinder.Eval(Container.DataItem, "CategoryID")%>
                </td>
                <td>
                    <%# DataBinder.Eval(Container.DataItem, "ProductName")%>
                </td>
                <td>
                    <%# DataBinder.Eval(Container.DataItem, "Price")%>
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:DataList>

另外这里是 MSDN DataList文章。在这里您可以找到一个很好的示例,说明如何将数据绑定(bind)到 DataList。

只是一个笔记 您尝试绑定(bind)到 DataaList 的任何特定原因? 您问题中的代码可以像这样轻松绑定(bind)到 gridview:

Web.config

<connectionStrings>
    <add name="conn" connectionString="your connection string"/>
</connectionStrings>

来源

<asp:GridView ID="GridView1" runat="server">
</asp:GridView>

代码隐藏

private void ShowPossiblePurchases(string categoryName)
{
    if (!String.IsNullOrEmpty(categoryName))
    {
        try
        {
            string connString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
            SqlConnection connection = new SqlConnection(connString);
            string commandText = "SELECT TOP 2 * FROM Menu WHERE CategoryName=@CategoryName ORDER BY NEWID()";
            using (connection)
            {
                using (SqlCommand command = new SqlCommand(commandText, connection))
                {
                    command.Parameters.AddWithValue("@CategoryName", categoryName);
                    SqlDataAdapter adapter = new SqlDataAdapter(command);
                    DataTable table = new DataTable();
                    adapter.Fill(table);
                    GridView1.DataSource = table;
                    GridView1.DataBind();
                }
            }
            connection.Close();
        }
        catch (Exception ex)
        {
            Label lblError = (Label)Page.FindControl("lblError");
            lblError.Text = ex.Message;
        }
    }
}

关于c# - Datalist 控件 : binding with ADO. NET 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6595771/

相关文章:

c# - 将接口(interface)转换为它不继承的另一个接口(interface)

c# - C# 中的反射和运算符重载

c# - 在 Web 应用程序中在哪里以及如何使用拦截器?

android - 双向数据绑定(bind)错误 : cannot resolve a setter for boolean property

javascript - Angular 如何知道应该重新应用绑定(bind)以使用更新的数据刷新 UI 元素?

c# - WPF Datagrid IValueConverter ConvertBack 自己类的对象

c# - 超链接样式的按钮

c# - 使用 Asp.Net FileUpload 控件时,上传的文件在保存之前位于何处?

c# - ASP.NET GridView 中的复选框未选中

php - 如何在数据更改时更新 UI?