在gridview中为动态超链接创建通用方法

时间:2018-01-10 09:55:42

标签: c# asp.net .net generics gridview

我在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;
    }

1 个答案:

答案 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>>指定构造链接时要执行的自定义代码。