广告屏硬件可存储256则广告,但是当用户输入相同的广告ID时,就会把原先的广告覆盖掉。
为了避免这种情况,我在下发广告ID参数设置旁边加了一个DropDownList,用来显示前五个还未使用或者是发送成功但已经删除的广告ID,用户选择的ID会自动添加到text控件上。
效果如图:
我的思路是这样的:
首先用sql语句查询出发送成功还未删除的记录,而这些记录与{0-256}的补集就是我需要的。
但怎么得到它们的补集呢,这里我用arraylist先把0-256存到里面,然后用中间变量与sql的查询结果比较判断,最后循环利用ArrayList的Remove方法去掉已经使用的广告Id,得到的补集就是我需要的未使用的广告ID了。
代码如下(供参考):
Code
if (!IsPostBack)
{
//查询已经成功下发且未被删除的广告id
string adUsing = "select AdID from AdverMan where IsDel = 0 and IsSucc =1 group by AdID order by AdID";
ArrayList arrDrop = new ArrayList();
dm.execsqlnojg(adUsing);
DataTable dss = dm.getdata(adUsing);
for (int i = 0; i < 256; i++)
{
arrDrop.Add(i);
for (int j = 0; j < dss.Rows.Count; j++)
{
int idTemp = Convert.ToInt32(dss.Rows[j][AdID]);
if(i==idTemp)
{
arrDrop.Remove(i);
}
}
}
ArrayList arrTop = new ArrayList(arrDrop.GetRange(0, 5));
for (int k = 0; k < 5; k++)
{
DropDownList1.Items.Insert(k,new ListItem(arrTop[k].ToString()));
DropDownList1.DataBind();
}
}