首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataRowView中的编辑值

DataRowView中的编辑值
EN

Stack Overflow用户
提问于 2014-10-28 08:20:05
回答 3查看 4.5K关注 0票数 0

目前,我正在使用VS 2008进行我的开发(ASP.NET C#)。

目前,我在GridView上遇到了一些问题:

我使用GridView DataSource (从数据库查询)将数据绑定到DataSet,然后有一个复选框,允许用户使用以下方法隐藏或显示该列:

代码语言:javascript
复制
    if (chkPhone.Checked == true) { strSQL += ", recruit_website as 'Website'"; }

好的,现在我面临的问题是,如何使这个特定的列行用锚标记包装?这样,用户就可以通过GridView直接访问相应的网站。

因此,我使用的第一个方法是使用'RowDataBound‘事件并执行如下操作:

代码语言:javascript
复制
    e.Row.Cells[7].Text = "<a href='" + e.Row.Cells[7].Text + '">Click Me</a>";

但是问题出现了,如果用户选择不显示该列,列索引将是不同的。(用户可以选择更多的选项来隐藏索引中的SO-1列,这是没有意义的)

因此,这个方法失败了,我尝试使用另一种方法,即在‘DataRowView’事件中使用RowDataBound:

代码语言:javascript
复制
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRowView rowView = (DataRowView)e.Row.DataItem;

        rowView["Website"] = "something"; //something to deal with here
    }

使用此方法,我可以使用列名从GridView获得值,但不能设置值。

那么对这种情况最好的解决方案是什么呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-28 08:56:44

您仍然需要检查您想要执行的列,但我认为这可能会有所帮助。

代码语言:javascript
复制
 // Your code for filling dataset
foreach(dataTable theTable in dataSet.Tables)
    {
           foreach(DataRow row in theTable.Rows)
            {
                foreach(DataColumn cell in theTable.Columns)
                {
                    string value = row[cell].ToString();
                    row[cell] = "<a href='" + value + "'>" + value + "</a>";

                }
            }
    }
//Your databinding and stuff;

这也可能奏效:

代码语言:javascript
复制
foreach(dataTable theTable in dataSet.Tables)
        {
               foreach(DataRow row in theTable.Rows)
                {
                    foreach(DataColumn cell in theTable.Columns)
                    {
                       string value = row[cell].ToString();
                      HyperLink linker = new HyperLink();
                       DataColumn col = new DataColumn();

                     linker.NavigateUrl = value; // you need to change this so it works
                     col.DefaultValue = linker;

                      row[cell] = col;

                    }
                }
        }

最后猜测:这不是最理想的,但它对我有效。在用户可以做任何事情之前,除了在数据库之后,您还需要这样做。

代码语言:javascript
复制
 foreach(GridViewRow row in GridView1.Rows)
          {
              foreach(TableCell cell in row.Cells)
              {
                  string value = col.Text.toString();
                  col.Text = "<a href='" + value + "'>" + value + "</a>";
              }
          }
票数 1
EN

Stack Overflow用户

发布于 2014-10-28 08:55:50

第二个解决方案是个好办法,但你做错了:

RowDataBound事件遍历DataSource并逐行绑定GridView。因此,您不能在使用这个DataSource时更改它。

您也应该这样做,逐行检查您的DataSource (并修改您想要的值),但是在Databinding之前,在调用yourGridView.DataBind()之前不使用->

=====编辑======

我给你另一个解决办法:

您可以在您想要一个GridView的列中添加HyperLink:

代码语言:javascript
复制
<asp:HyperLink ID="HLWebsite" runat="server"></asp:HyperLink>

然后,在RowDataBound中,绑定每个HyperLink:

代码语言:javascript
复制
if (e.Row.RowType == DataControlRowType.DataRow)
{
   HyperLink HLWebsite = (HyperLink) e.Row.FindControl("HLWebsite");
   DataRowView rowView = (DataRowView)e.Row.DataItem;

   HLWebsite.NavigateURL = rowView["Website"].ToString(); 

}

希望能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2014-10-29 06:23:19

最后,我决定使用@Koen方法,但添加了一个正则表达式,以查看要使其成为超链接的字符串。我是怎么做到的:

在GridView DataBind()之后,我有以下代码

代码语言:javascript
复制
        if (chkWebsite.Checked == true)
    {
        foreach (GridViewRow row in gVRecruiterView.Rows)
        {
            foreach (TableCell cell in row.Cells)
            {
                string value = cell.Text.ToString();
                if (System.Text.RegularExpressions.Regex.IsMatch(value, @"^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$"))
                {
                    cell.Text = "<a href='" + value + "'>" + value + "</a>";
                }
            }
        }
    }

在这种情况下,至少现在,它解决了我的问题暂时:P非常感谢那里的人提出解决方案!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26603623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档