2013-02-08 71 views
0

我可以创建这样在我的ASPX页面自定义链接:GridView控件计算字段

<asp:GridView 

    ID="GridView1" 
    CssClass="rounded-corner" 
    runat="server" 
    AutoGenerateColumns="false" 
    EnableModelValidation="True" 
    AllowSorting="True" 
    onsorting="GridView1_Sorting" 
    EnableViewState="true" 
    AllowPaging="True" 
    PageSize="10" 
    OnPageIndexChanging="GridView1_PageIndexChanging" > 

     <Columns> 
      <asp:BoundField DataField="DATE_ENTERED" HeaderText="Date Submitted" dataformatstring="{0:MMMM d, yyyy}" htmlencode="false" /> 
      <asp:BoundField DataField="CLIENT_CLAIM_NUM" HeaderText="Your Claim #" /> 
      <asp:BoundField DataField="PRIMARY_INSURED" HeaderText="Insured" /> 
      <asp:BoundField DataField="PRIMARY_CLAIMANT" HeaderText="Claimant" /> 
      <asp:BoundField DataField="LOB_ID" HeaderText="Type" /> 

      <asp:TemplateField HeaderText="Branch"> 
       <ItemTemplate> 
        <asp:HyperLink ID="BRANCH_NAME" runat="server" NavigateUrl='<%# "mailto:"+Eval("OWNERS_EMAIL") %>' Text='<%# Eval("BRANCH_NAME") %>' ToolTip='<%# 
        "<span style=\"text-decoration:underline;\">"+Eval("BRANCH_NAME").ToString().Trim() + "</span><br />" + 
        Eval("OWNERS_FIRST_NAME").ToString().Trim() + " " + 
        Eval("OWNERS_LAST_NAME").ToString().Trim() + "<br />" + 
        Eval("OWNERS_EMAIL").ToString().Trim() + "<br />" + 
        Eval("OWNERS_OFFICE_PHONE").ToString().Trim() + "<br />" + 
        Eval("OWNERS_FAX_PHONE").ToString().Trim() 
        %> '> 
        </asp:HyperLink> 
       </ItemTemplate> 
      </asp:TemplateField> 

     </Columns> 

</asp:GridView> 

是存在的,而是一种方法,直接在后面我的代码做到这一点;通过创建一种“计算字段?”

后面的代码如下:

DbProviderFactory dbf = DbProviderFactories.GetFactory(); 
using (IDbConnection con = dbf.CreateConnection()) 
{ 
    string sSQL; 
    // 12/04/2006 Paul. Only include active users. 
    sSQL = "select top 20    "   + ControlChars.CrLf 
     + " DATE_ENTERED, CLIENT_CLAIM_NUM, PRIMARY_INSURED, PRIMARY_CLAIMANT, LOB_ID, BRANCH_NAME," + ControlChars.CrLf 
     + " OWNERS_FIRST_NAME, OWNERS_LAST_NAME, OWNERS_NAME, OWNERS_EMAIL, OWNERS_OFFICE_PHONE, OWNERS_FAX_PHONE" + ControlChars.CrLf 
     + " from vwFILES_DetailViewWithOwners" + ControlChars.CrLf 
     + " where 1 = 1     " + ControlChars.CrLf; 
    using (IDbCommand cmd = con.CreateCommand()) 
    { 
     cmd.CommandText = sSQL; 

     using (DbDataAdapter da = dbf.CreateDataAdapter()) 
     { 
      ((IDbDataAdapter)da).SelectCommand = cmd; 
      using (DataTable dt = new DataTable()) 
      { 
       da.Fill(dt); 
       vwMain = dt.DefaultView; 
       GridView1.DataSource = vwMain; 
       if (!IsPostBack) 
       { 

        GridView1.DataBind(); 
       } 
      } 
     } 
    } 
} 

我可以简单地在我的代码创建新的领域的背后,所以我可以把它像这样:

<asp:TemplateField HeaderText="Branch"> 
    <ItemTemplate> 
     <asp:HyperLink ID="BRANCH_NAME" 
      runat="server" 
      NavigateUrl='<%# "mailto:"+Eval("OWNERS_EMAIL") %>' 
      Text='<%# Eval("BRANCH_NAME") %>' 
      ToolTip='<%# Eval("MY_CALCULATED_FIELD") %>'> 
     </asp:HyperLink> 
    </ItemTemplate> 
</asp:TemplateField> 

谢谢你的建议。

回答

2

您可以在C#代码中创建一个函数来格式化数据。这篇文章在MSDN谈论它:http://msdn.microsoft.com/en-us/library/bb288032.aspx#aspnett12ustmpfldsvb_topic5

总之,你会改变你的项目模板是这样的:

<ItemTemplate> 
    <asp:HyperLink ID="BRANCH_NAME" runat="server" 
      NavigateUrl='<%# "mailto:"+Eval("OWNERS_EMAIL") %>' 
      Text='<%# Eval("BRANCH_NAME") %>' 
      ToolTip='<%# GetBranchAddress(CType(Container.DataItem, System.Data.DataRowView).Row) %> '> 
    </asp:HyperLink> 
</ItemTemplate> 

,并在C#,创建这样一个功能:

protected string GetBranchAddress(DataRow row) 
{ 
    return "<span style=\"text-decoration:underline;\">"+ 
       row["BRANCH_NAME"].ToString().Trim() + "</span><br />" + 
       row["OWNERS_FIRST_NAME"].ToString().Trim() + " " + 
       row["OWNERS_LAST_NAME"].ToString().Trim() + "<br />" + 
       row["OWNERS_EMAIL"].ToString().Trim() + "<br />" + 
       row["OWNERS_OFFICE_PHONE"].ToString().Trim() + "<br />" + 
       row["OWNERS_FAX_PHONE"].ToString().Trim(); 

} 

这种方法也很好,因为你可以在c#函数中设置断点并添加错误处理等。

+0

真棒的想法。非常感谢你。 – user1477388 2013-02-08 21:08:05

+0

我今天试了这个,我得到错误,“方法没有超载'GetBranchAddress'需要'0'参数。”我如何将变量'row'传递给函数? – user1477388 2013-02-11 16:30:00

+0

你说得对。在我的例子中,我忘记了如何将参数传递给函数。我更新了示例(对于ItemTemplate)以显示如何将Row作为参数传递给函数。顺便说一下,在链接页面(在MSDN上),它在下面的段落“图15”中讨论了这个问题。 – tgolisch 2013-02-12 14:46:59