目前,我正在使用VS 2008进行我的开发(ASP.NET C#)。
目前,我在GridView上遇到了一些问题:
我使用GridView DataSource (从数据库查询)将数据绑定到DataSet,然后有一个复选框,允许用户使用以下方法隐藏或显示该列:
if (chkPhone.Checked == true) { strSQL += ", recruit_website as 'Website'"; }好的,现在我面临的问题是,如何使这个特定的列行用锚标记包装?这样,用户就可以通过GridView直接访问相应的网站。
因此,我使用的第一个方法是使用'RowDataBound‘事件并执行如下操作:
e.Row.Cells[7].Text = "<a href='" + e.Row.Cells[7].Text + '">Click Me</a>";但是问题出现了,如果用户选择不显示该列,列索引将是不同的。(用户可以选择更多的选项来隐藏索引中的SO-1列,这是没有意义的)
因此,这个方法失败了,我尝试使用另一种方法,即在‘DataRowView’事件中使用RowDataBound:
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView rowView = (DataRowView)e.Row.DataItem;
rowView["Website"] = "something"; //something to deal with here
}使用此方法,我可以使用列名从GridView获得值,但不能设置值。
那么对这种情况最好的解决方案是什么呢?
发布于 2014-10-28 08:56:44
您仍然需要检查您想要执行的列,但我认为这可能会有所帮助。
// 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;这也可能奏效:
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;
}
}
}最后猜测:这不是最理想的,但它对我有效。在用户可以做任何事情之前,除了在数据库之后,您还需要这样做。
foreach(GridViewRow row in GridView1.Rows)
{
foreach(TableCell cell in row.Cells)
{
string value = col.Text.toString();
col.Text = "<a href='" + value + "'>" + value + "</a>";
}
}发布于 2014-10-28 08:55:50
第二个解决方案是个好办法,但你做错了:
RowDataBound事件遍历DataSource并逐行绑定GridView。因此,您不能在使用这个DataSource时更改它。
您也应该这样做,逐行检查您的DataSource (并修改您想要的值),但是在Databinding之前,在调用yourGridView.DataBind()之前不使用->
=====编辑======
我给你另一个解决办法:
您可以在您想要一个GridView的列中添加HyperLink:
<asp:HyperLink ID="HLWebsite" runat="server"></asp:HyperLink>然后,在RowDataBound中,绑定每个HyperLink:
if (e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink HLWebsite = (HyperLink) e.Row.FindControl("HLWebsite");
DataRowView rowView = (DataRowView)e.Row.DataItem;
HLWebsite.NavigateURL = rowView["Website"].ToString();
}希望能帮上忙。
发布于 2014-10-29 06:23:19
最后,我决定使用@Koen方法,但添加了一个正则表达式,以查看要使其成为超链接的字符串。我是怎么做到的:
在GridView DataBind()之后,我有以下代码
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\-\.\?\,\'\/\\\+&%\$#_]*)?$"))
{
cell.Text = "<a href='" + value + "'>" + value + "</a>";
}
}
}
}在这种情况下,至少现在,它解决了我的问题暂时:P非常感谢那里的人提出解决方案!
https://stackoverflow.com/questions/26603623
复制相似问题