3

私はasp.net/c#の初心者で、データベースから生成される非常にシンプルなメニューを作成しようとしています。これまでのところ、データベースからデータテーブルに、そしてそこから配列にテーブルを抽出することができました。

私の問題は、ページ内のループでデータを使用する方法がわからないことです(メニューはユーザーの種類によって異なります)。使ってみ<% =Array %>ましたが、while/forループや割り当て行の中で使うことができないようです。

たぶん私はこれを間違った方法で攻撃しています、私の質問は基本的にこれだと思います:動的ページでデータベースから収集したデータ(名前、URL)をどのように使用できますか?

これが私の現在のコードです:

    public string[] keep = new string[100];
public void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //Response.Write("response in postback");
        getMenu();
    }
}

void getMenu()
{
    Response.Write("response in getmenue");
    SqlConnection con = new SqlConnection();
    con.ConnectionString = "server=(local);database=PhilipsMaterials;Integrated Security=SSPI;";
    con.Open();
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    string sql = "Select * from Materials";
    SqlDataAdapter da = new SqlDataAdapter(sql, con);
    da.Fill(ds);
    dt = ds.Tables[0];
    DataRow[] drowpar = dt.Select();
    int i = 0;
    foreach (DataRow dr in drowpar)
    {
        keep[i] = dr["Material Name"] as string;
        i = i + 1;
    }

    con.Close();

}

ありがとうございました。

4

2 に答える 2

5

gridview や repeater などのデータ コントロールを使用するだけで済みます。その後、データセットをそれらのコントロールの datasource プロパティにバインドできます。私の観点からは、リピーターは動的メニューに最適なデータコントロールになります..

リピーター様向けのマークアップはこちら

  <asp:Repeater ID="Rept" runat="server">
    <HeaderTemplate>
    <ul>
    </HeaderTemplate>
    <ItemTemplate>
    <li><a href='<%#Eval("url") %>'><%#Eval("names") %></a></li>
    </ItemTemplate>
    <FooterTemplate>
    </ul>
    </FooterTemplate>

ここにデータセットをバインドするコードがあります

Rept.DataSource = ds;
Rept.DataBind();
于 2012-12-22T19:30:50.547 に答える
1

ヘッダーとも互換性のある、素晴らしく明確な方法です。UpdatePanel は、ページ内でリテラル コントロールを使用し、その上でメニューをレンダリングすることです。

ページのどこかにリテラルを配置します。

<asp:Literal runat="server" ID="txtInfo" EnableViewState="false" />

次に、を使用してデータの背後にあるコードをレンダリングしStringBuilder、このリテラルに次のように配置します。

StringBuilder sbRenderOnMe = new StringBuilder();

sbRenderOnMe.Append("<br> Some Text");

txtInfo.Text = sbRenderOnMe.ToString();

たとえば、コードは次のようになります。

using(SqlConnection con = new SqlConnection())
{
  con.ConnectionString = "server=(local);database=PhilipsMaterials;Integrated Security=SSPI;";
  con.Open();
  DataSet ds = new DataSet();
  DataTable dt = new DataTable();
  string sql = "Select * from Materials";
  SqlDataAdapter da = new SqlDataAdapter(sql, con);
  da.Fill(ds);
  dt = ds.Tables[0];
  DataRow[] drowpar = dt.Select();

  StringBuilder sbRenderOnMe = new StringBuilder();
  foreach (DataRow dr in drowpar)
  {
     sbRenderOnMe.AppendFormat("Some Menu Names : {0}", dr["Material Name"]);
  }

  con.Close();
}

txtInfo.Text = sbRenderOnMe.ToString();

Response.Writeいくつかの注意事項:おそらくページの最初のバイトの前に書き込むため、コード ビハインドの especial を使用しないでください。出力へのResponse.Write直接書き込み - あなたの場合、いくつかのデータを作成してページの特定の場所に配置することに勝った場合、ページへのResponse.Write直接書き込みであるため、コードビハインドからそれを処理することはできません。

于 2012-12-22T19:31:37.193 に答える