我在RowDataBound gridview事件中使用动态链接绑定gridview,它完美地运行。由于我需要为很多列生成超链接,有没有办法创建一个可以返回超链接对象的泛型方法。
代码:
public static int flipBits(int n) {
return ~n;
}
更新1:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
for (int i = 0; i < GridView1.HeaderRow.Cells.Count; i++)
{
string strHeaderRow = GridView1.HeaderRow.Cells[i].Text;
if (strHeaderRow == "EmployeeID")
{
HyperLink hl = new HyperLink();
string strURL = "EmpURL";
hl.Text = e.Row.Cells[i].Text;
hl.Font.Underline = true;
hl.Target = "_blank";
hl.NavigateUrl = strURL;
hl.Attributes.Add("style", "color:Black;");
e.Row.Cells[i].Controls.Add(hl);
}
else if (strHeaderRow == "Department")
{
HyperLink hl = new HyperLink();
string strURL = "DepURL";
hl.Text = e.Row.Cells[i].Text;
hl.Font.Underline = true;
hl.Target = "_blank";
hl.NavigateUrl = strURL;
hl.Attributes.Add("style", "color:Black;");
e.Row.Cells[i].Controls.Add(hl);
}
}
}
}
我能够编写一个方法但是如何添加句柄以下语句需要索引和GridViewRowEventArgs。
public HyperLink hlCol(string strURL)
{
HyperLink hl = new HyperLink();
string strURL = "DepURL";
hl.Text = e.Row.Cells[i].Text;
hl.Font.Underline = true;
hl.Target = "_blank";
hl.NavigateUrl = strURL;
hl.Attributes.Add("style", "color:Black;");
e.Row.Cells[i].Controls.Add(hl);
return hl;
}
答案 0 :(得分:3)
没有必要使用通用方法,也许您使用泛型,如“以通用方式”
您可以尝试以下方法:
protected void AddHyperLink(TableCell cell, string strURL)
{
HyperLink hl = new HyperLink();
hl.Text = cell.Text;
hl.Font.Underline = true;
hl.Target = "_blank";
hl.NavigateUrl = strURL;
hl.Attributes.Add("style", "color:Black;");
cell.Controls.Add(hl);
}
protected void AddAllLinks(GridView gridView, GridViewRowEventArgs e, Dictionary<string, string> urls)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
for (int i = 0; i < GridView1.HeaderRow.Cells.Count; i++)
{
var key = GridView1.HeaderRow.Cells[i].Text;
string url;
if (urls.TryGetValue(key, out url))
{
AddHyperLink(e.Row.Cells[i], url);
}
}
}
}
static readonly Dictionary<string, string> headersToUrls = new Dictionary<string, string>
{
{ "Department", "DepUrl" },
{ "EmployeeID", "EmpURL" }
};
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
AddAllLinks(GridView1, e, headersToUrls);
}
创建超链接的逻辑位于AddHyperLink
,它将网址重定向到。 AddAllLinks
将为作为参数传递的字典中定义标题文本的所有列创建链接。原始处理程序只调用AddAllLinks
一个字典,该字典指定一个字典,其中包含url映射的标题
如果您需要按行自定义链接,则可以使用在创建网址时传递给string.Format
的字符串模板,也可以使用允许您使用的Dictionary<string, Func<TableCell, string>>
指定构造链接时要执行的自定义代码。