1

过去一周左右,我一直在使用 asp 表单。大多数情况下,我已经习惯了 gridview 并使用 site.master 在每个页面上显示菜单并使用 web.config 中的连接字符串来访问我的 sql server 数据库。

但是我并没有发现 gridview 的所有功能,并且对这一切应该如何工作感到有些困惑。我来自 PHP,而 ASP 似乎是一个不同的世界。我想要做的是循环一个表并打印出记录,但我想使用我自己的循环而不是 gridview,所以我也可以有自定义列。所以我可以用不同的获取和类似的东西创建动态链接。在 PHP 中有语法连接到数据库,编写循环,然后通过回显或类似的方式打印其中的 html。

在 aspx 中,我使用 C# 作为我的语言,所以我明白我实际上是在 <% --code-- %> 之间编写 c# 代码以实现这一点

所以asp基本上是一种使用c#或VB编写脚本的能力

最后,我应该在 Page_load 后面的代码中还是在 aspx 文件的顶部编写数据库连接...

对新手问题感到抱歉,如果有人可以提供帮助,我将非常感谢您指出一个合适的教程以及解释所有这些。我发现我通常使用的 w3schools 东西非常令人困惑。

4

4 回答 4

1

如果使用得当,网格视图可以非常强大,您可以做的一件事是挂钩一个事件(在数据行绑定上),这将允许您一次操作每一行。

ASP.NET 比 PHP 更受事件驱动,但是如果您仍想以 PHP 方式做事,理论上您可以循环遍历每个结果。

  using (
           var oConn =
               new SqlConnection(
                   ConfigurationManager.ConnectionStrings["myConnectionStringNameFromWebConfig"].ConnectionString)
           )
        {
            oConn.Open();
            using (SqlCommand oCmd = oConn.CreateCommand())
            {
                oCmd.CommandType = CommandType.StoredProcedure;
                oCmd.CommandText = "p_jl_GetThemeForPortal";
                oCmd.Parameters.Add(new SqlParameter("@gClientID", clientID));
            }

             using(var oDR = oCmd.ExecuteReader())
                {
                    while(oDR.Read())
                    {
                        string x = (string)oDR["ColumnName"];
                        int y = (int) oDR["ColumnName2"];
                        // Do something with the string and int
                    }
                }

        }

这种模式(通过使用 using 语句)确保您的连接在每个提取序列结束时关闭,因此您没有大量打开的数据库连接

于 2012-06-08T11:12:08.323 回答
1

首先:在服务器端的 Page_load 或任何其他选择记录的方法中编写代码。对于从数据库中选择记录,您可以使用以下代码

string myConnectionString="server=dbserver;database=mydatabase;uid=user;pwd=password;Connect Timeout=120;pooling=true;Max Pool Size=60;";// you can place your connection string in web.config
SqlConnection con = new SqlConnection(myConnectionString);

SqlCommand cmd = con.CreateCommand();
cmd.CommandText = @"SELECT [stuff] FROM [tableOfStuff]";

con.Open();

SqlDataReader dr = null;
try
{
    dr = cmd.ExecuteReader();

    while(dr.Read())
    {
        // construct your html for your table data here
    }
}
catch(SomeTypeOfException ex){ /* handle exception */ }
于 2012-06-08T11:12:40.323 回答
0

示例 aspx:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="CountryID" HeaderText="ID" ItemStyle-HorizontalAlign="Center" />
        <asp:TemplateField HeaderText="Flag" ItemStyle-HorizontalAlign="Center">
            <ItemTemplate>
                <img src='<%# "img/flags/" + Eval("CountryFlag").ToString()%>' alt="flag" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="CountryName" HeaderStyle-HorizontalAlign="Left" HeaderText="Name" ItemStyle-CssClass="dg_title"/>
        <asp:TemplateField HeaderText="VAT" ItemStyle-HorizontalAlign="Center">
            <ItemTemplate>
                <%# CheckBool(Convert.ToBoolean(Eval("CalculateVat"))) %>
            </ItemTemplate>
        </asp:TemplateField>  
        </Columns>
</asp:GridView>

在后面的代码中CheckBool是我制作的一个函数:

public string CheckBool(bool toCheck)
{
    if (toCheck)
        return "<img src=\"img/checked.png\" alt=\"Yes\" />";
    else
        return "<img src=\"img/deleted.png\" alt=\"No\" />";
}

并且在Page_Load

protected void Page_Load(object sender, EventArgs e)
{
    GridView1.DataSource = SsUtils.GetCountries();
    GridView1.DataBind();        
}

SsUtils是一个静态类,GetCountries返回一个List<Country>是类国家的集合。但是您也可以使用DataSetorDataTable作为您的网格视图的数据源。

这只是一个示例,以显示一些可能性。您还可以使用网格视图来编辑按钮、分页、排序等。

于 2012-06-08T13:40:45.700 回答
0

为了更好地控制渲染,您可以使用ListView。例如,向下滚动到该页面的底部。

于 2012-06-08T11:34:20.913 回答