0

私はC#の初心者です。プロジェクトに取り組んでいます。個別の値を含むデータテーブルをループしようとしています。データベースには1、2、3、4、6、8、9、10のような曲IDがありますが、データセットはこの値をそれぞれ0,1,2,3,4,5,6,7...ありがとう

String sql = "select  title, song_id from up_song where Song_type='Mp3 Tracks' ";
    adpt = new SqlDataAdapter(sql, cn);
    ds = new DataSet();

    adpt.Fill(ds, "title");
    var maxvalue = ds.Tables["title"].AsEnumerable().Max(x => x.Field<int>("song_id"));
    var minvalue = ds.Tables["title"].AsEnumerable().Min(x => x.Field<int>("song_id"));
    for (i =maxvalue; i >= minvalue; --i)
        {
            try
            {
                hyperlink[i] = new HyperLink();
                hyperlink[i].ID = "hyperlink" + i;
                hyperlink[i].Text = ds.Tables["title"].Rows[i].ItemArray[0].ToString();
                hyperlink[i].NavigateUrl = "Downloadpage.aspx";
                hyperlink[i].ForeColor = System.Drawing.Color.White;
                Panel1.Controls.Add(hyperlink[i]);
                Panel1.Controls.Add(new LiteralControl("<br>"));
                HttpCookie coo = new HttpCookie("song");
                coo["sogtit"] = ds.Tables["title"].Rows[i].ItemArray[0].ToString();
                Response.Cookies.Add(coo);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }
4

2 に答える 2

2

ここでは、ループ変数を使用して行にアクセスしていDataTableます。

coo["sogtit"] = ds.Tables["title"].Rows[i].ItemArray[0].ToString();

ただし、変数はのとID値から初期化さminmaxますsong_id

なぜこれらの値が必要なのかわかりません。ループしてみませんかDataRows

foreach(DataRow row in ds.Tables["title"].Rows)
{
    // ...
    int songID = row.Field<int>("song_id")
    Hyperlink hl = new HyperLink(); // you don't need the array of hyperlinks neither
    hl.ID = "hyperlink" + songID;
    string title = row.Field<string>("title);
    hl.Text = title;
    coo["sogtit"] = title;
    Panel1.Controls.Add(hl);
    // ...
}

アップデート

それらの最新のアップロード曲にアクセスしたいので、forループとインデックスを最小値と最大値として使用します。アップロードされた最新の最低6曲にアクセスしたいという意味です

Linqを使用して、アップロードされた最後の6曲を取得できます。

var last6Uploaded = ds.Tables["title"].AsEnumerable()
    .OrderByDescending(r => r.Field<int>("song_id"))
    .Take(6);

foreach(DataRow row in last6Uploaded)
{
    // ...
}

DateTime主キーの代わりにフィールドを使用する必要があることに注意してください。

于 2013-02-15T14:10:53.700 に答える
0

配列インデックス ( i) と song_id の値は、互いに何の関係もありません。song_id が 1000 から始まる場合はどうなりますか? または、データベースが song_id によって降順でインデックス付けされている場合は?

于 2013-02-15T14:08:37.323 に答える