在绑定到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请求。这不会返回错误,但在必要时似乎不会将数据更改为占位符——有什么建议吗?

在绑定到asp.net中继器之前更改数据集第0列中的数据

我认为你的方法还可以。只要你不想下载文件,你就可以使用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)

希望这能有所帮助。

  1. 确保调用了itemdatabound事件
  2. 将此代码放入事件中:

            string imgURL = row[0].ToString();
            bool graphImageExists = graphImageExists(imgURL);
            if (graphImageExists)
            {
            }
            else
            {
                row[0] = "my placeholder";
            }