GridView计算字段

时间:2013-02-08 20:19:09

标签: asp.net gridview webforms

我可以在我的ASPX页面中创建一个自定义链接,如下所示:

<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>

感谢您的建议。

1 个答案:

答案 0 :(得分: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#函数中设置断点并添加错误处理等。