在绑定到asp.net中继器之前更改数据集第0列中的数据
本文关键字:数据集 0列 数据 绑定 asp net 中继器 | 更新日期: 2023-09-27 18:21:43
我有一个绑定到asp.net中继器控制的数据集
其中一列是指向外部页面的打开图形图像的url。
我将url存储在数据库中,但发现一些在一段时间后停止显示,可能是因为图像url发生了更改。因此,我想检查图形图像url是否返回了响应,如果没有,则返回我的占位符url。我不想替换我数据库中的url,以防这是一个临时问题——我不想丢失原始url。
假设我创建数据集的代码是:
SqlCommand countMostRead = new SqlCommand(getMostread, dbcon);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(countMostRead);
da.Fill(ds);
rptLatest.DataSource = ds;
rptLatest.DataBind();
图形图像url是数据集中的第一列,是否有方法检查每行的数据集列0,并在图形图像url不存在的情况下更改它?
我想我需要在column0上运行foreach,运行我的httpweb请求
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "HEAD";
bool exists;
try
{
request.GetResponse();
exists = true;
return exists;
}
catch
{
exists = false;
return exists;
}
如果httpwebrequest返回false,则将列数据更改为我的占位符url。
然而,我不确定这是否真的是正确的方法,如果是,正确的语法是什么?
有人能提出实现这一目标的代码吗?或者,如果我找错了树,请建议一种替代方法。
编辑-作为一个试探性的尝试,我尝试过这个:
foreach (DataTable table in ds.Tables)
{
foreach (DataRow row in table.Rows)
{
string imgURL = row[0].ToString();
bool graphImageExists = graphImageExists(imgURL);
if (graphImageExists)
{
}
else
{
row[0] = "my placeholder";
}
}
}
其中graphImageExists()运行httpweb请求。这不会返回错误,但在必要时似乎不会将数据更改为占位符——有什么建议吗?
我认为你的方法还可以。只要你不想下载文件,你就可以使用HttpWebRequest发送一个HEAD请求(检查文件是否存在):
HttpWebResponse resp = null;
var req = (HttpWebRequest)WebRequest.Create("the URL");
req.Method = "HEAD";
resp = (HttpWebResponse)req.GetResponse();
如果您收到WebException,则表示该文件不存在。
希望能有所帮助。
我想我现在明白了。你的问题似乎是,你试图在数据绑定中继器的源后更改url。在数据绑定中继器的源之前,请尝试进行url检查;如果不可能,请使用Repeater.ItemDataBound事件(https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound(v=vs.110).aspx)
希望这能有所帮助。
- 确保调用了itemdatabound事件
-
将此代码放入事件中:
string imgURL = row[0].ToString(); bool graphImageExists = graphImageExists(imgURL); if (graphImageExists) { } else { row[0] = "my placeholder"; }