2013-02-15 53 views
0

我是新手到C#我正在項目上工作我試圖循環通過包含不同值的數據表 和我的數據庫有歌曲ID像:1,2,3 ,4,6,8,9,10 但數據集採用此值作爲0,1,2,3,4,5,6,7分別...謝謝如何使用行索引作爲數據集索引使用c#.net

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); 
      } 
     } 
+0

您是否嘗試在for循環之前設置minvalue = minvalue + 1? – 2013-02-15 14:03:38

+0

我建議改爲使用foreach循環:D使讀起來更容易。 – 2013-02-15 14:05:36

+0

,但如果我使用foreach循環如何我可以訪問數據庫中的最新添加的行 – 2013-02-15 14:26:01

回答

0

的數組索引(i)而song_id 的值應該與沒有任何關係。如果你的song_id在1000開始呢?或者,如果您的數據庫按照song_id的降序排列?

+0

實際上,我在musicsite上工作,其數據庫包含我想要在超鏈接中顯示的標題,所以我想訪問那些最新的上傳歌曲,所以我用於循環和索引有最小值和最大值,但我的代碼在這裏不起作用,它只顯示與歌曲ID相匹配的值。 – 2013-02-15 14:23:39

2

您正在使用循環變量接取在這裏DataTable行:

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

但變量是從你的song_idminmax 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); 
    // ... 
} 

更新

我想訪問這些最新上傳歌曲所以我使用循環和索引 作爲最小值和最大值。我的意思是想要訪問最新的上傳至少6 歌曲

你可以使用LINQ到拿到最後6首上傳的歌曲:

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

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

請注意,您應該使用的,而不是主鍵一個DateTime場。

+0

謝謝你,你的代碼真的幫助我,我正在使用musicsite,它的數據庫包含我想顯示爲超鏈接的標題,所以我想訪問那些最新的上傳歌曲,所以我用循環和索引作爲最小值和最大值。我的意思是想訪問最新上傳的最低6首歌曲的幫助。 – 2013-02-15 14:42:49

+0

@AnkitaSoni:我編輯了我的答案。 – 2013-02-15 15:02:42

+0

在這裏在一個頁面我顯示超鏈接,當用戶點擊這一個鏈接,我想顯示在另一個頁面的鏈接名稱。但我的問題是coo [「songtit」] = title是數據集的最後一個值?那麼如何在兩個html頁面之間傳輸數據? – 2013-02-16 08:17:56