我是c#的新手我正在研究项目我试图循环包含不同值的数据表 我的数据库有歌曲ID:1,2,3,4,6,8,9,10 但是数据集分别将此值取为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);
}
}
答案 0 :(得分:2)
您正在使用循环变量来访问此处DataTable
中的行:
coo["sogtit"] = ds.Tables["title"].Rows[i].ItemArray[0].ToString();
但该变量是根据min
的{{1}}和max
ID值初始化的。
我不知道为什么你需要这些值,为什么不循环song_id
:
DataRows
<强>更新强>
我想访问那些最新的上传歌曲,所以我用于循环和索引 作为最小值和最大值。我的意思是想要访问最新上传的最低6 曲
您可以使用Linq获取最近上传的6首歌曲:
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);
// ...
}
请注意,您应使用var last6Uploaded = ds.Tables["title"].AsEnumerable()
.OrderByDescending(r => r.Field<int>("song_id"))
.Take(6);
foreach(DataRow row in last6Uploaded)
{
// ...
}
字段而不是主键。
答案 1 :(得分:0)
数组索引(i
)和song_id 的值应该彼此无关。如果你的song_id从1000开始怎么办?或者,如果您的数据库按song_id按降序索引?