1

過去 1 週間ほど asp フォームを使用しています。ほとんどの場合、私は gridview に慣れ、site.master を使用して各ページにメニューを表示し、web.config の接続文字列を使用して SQL サーバー データベースにアクセスしています。

しかし、私は gridview がそれほど用途が広いとは思っておらず、これがどのように機能するのかについて少し混乱しています。私は PHP から来ましたが、ASP は世界が違うようです。私がやりたいのは、テーブルをループしてレコードを出力することですが、グリッドビューではなく独自のループを使用したいので、カスタム列も作成できます。そのため、さまざまな取得などで動的リンクを作成できます。PHP には、DB に接続し、ループを記述し、エコーなどでその中に html を出力する構文がありました。

aspx では言語として C# を使用しているので、これを実現するために <% --code-- %> の間に文字通り C# コードを記述していることを理解する必要があります。

したがって、asp は基本的に、c# または VB を使用してスクリプトを作成する機能です。

最後に、DB 接続をコード ビハインドの Page_load または aspx ファイルの先頭に記述する必要があります...

初心者の質問で申し訳ありませんが、誰かが助けてくれれば、これをすべて説明する適切なチュートリアルも指摘していただければ幸いです。私が通常使用する w3schools の内容は、非常に混乱を招くものであることがわかりました。

4

4 に答える 4

1

グリッド ビューは、正しく使用すれば非常に強力です。できることの 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 ステートメントを使用) により、各フェッチ シーケンスの最後に接続が確実に閉じられるため、開いている DB 接続が多数発生することはありません。

于 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は静的クラスであり、クラスの国のコレクションであるGetCountriesaを返します。List<Country>ただし、DataSetまたはDataTableをグリッドビューのデータソースとして使用することもできます。

これは、いくつかの可能性を示すための単なるサンプルです。グリッドビューで編集ボタン、ページング、並べ替えなどを行うこともできます。

于 2012-06-08T13:40:45.700 に答える
0

レンダリングをより詳細に制御するには、ListViewを使用できます。例については、そのページの一番下までスクロールします。

于 2012-06-08T11:34:20.913 に答える