微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – Gridview格式字段为电话号码,但有些结果是4位数的扩展名,如何处理?

所以我在gridview中显示sql表的结果.一些字段是电话号码.特定字段可以是正常的10位数字,但也可以是4位数字的扩展名.如果它是一个4位数字,我想至少不要在其上放置10位数字格式,最多我想在它前面加上Ext:然后是我的数据.这是我到目前为止所拥有的.我通常不是程序员,所以这是Visual Studio向导和谷歌结果拼凑在一起.
非常感谢您的帮助.

<form id="form1" runat="server">
<div>

    <asp:GridView ID="GridView1" runat="server" DataSourceID="sqlDataSource1"   AutoGenerateColumns="False">
        <Columns>
           <asp:TemplateField HeaderText="Call Destination" SortExpression="CallDestination">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("CallDestination") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# String.Format("{0:(###) ###-####}",Convert.ToInt64(DataBinder.Eval (Container.DataItem,"CallDestination")))%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:sqlDataSource ID="sqlDataSource1" runat="server" ConnectionString="<%$ConnectionStrings:OnCallConnectionString %>" SelectCommand="SELECT [TimeStamp],[CallerID],[Accepted],[CallDestination] FROM [OnCallLog]"></asp:sqlDataSource>

</div>
</form>

解决方法

您需要使用RowDataBound事件拦截每一行,因为它绑定到网格,以便您可以确定电话号码是10位数还是4位数,并根据具体情况处理每个值,如下所示:

标记

<asp:GridView ID="GridView1" runat="server" DataSourceID="sqlDataSource1" 
     AutoGenerateColumns="False" onrowdatabound="GridView1_RowDataBound">

注意:删除Text =’<%#String.Format(“{0:(###)### - ####}”,Convert.ToInt64(DataBinder.Eval(Container.DataItem,“CallDestination”) )))%>”来自< asp:Label>在< ItemTemplate>中,因为您将格式化文本并在RowDataBound事件中设置Text属性而不是声明性地.

代码隐藏:

protected void GridView1_RowDataBound(Object sender,GridViewRowEventArgs e)
{
    // Only interested in each data row,not header or footer,etc.
    if(e.Row.RowType == DataControlRowType.DaTarow)
    {
        // Find the Label2 control in the row
        Lable theLabel = (Label)e.row.FindControl("Label2");

        // Make sure control is not null
        if(theLabel != null)
        {
            // Cast the bound to an object we can use to extract the value from
            DaTarowView rowView = (DaTarowView)e.Row.DataItem;

            // Get the value for CallDestination field in data source
            string callDestinationValue = rowView["CallDestination"].ToString();

            // Find out if CallDestination is 10 digits or 4 digits
            if(callDestinationValue.Length == 10)
            {
                theLabel.Text = String.Format("{0:(###) ###-####}",Convert.ToInt64(rowView["CallDestination"]));
            }
            if(callDestinationValue.Length == 4)
            {
                theLabel.Text = "Ext: " + callDestinationValue;
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐