2013-02-15 48 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