0

我有一个 asp.net gridview 和一个包含数字的列,例如 1234567,我想显示最后 4 个数字,例如 xxx4567。这可能吗。

我将我的gridview绑定到一个对象列表,如下所示:

List<Details> objdet = Manager.Get_Details(ID);

             if (objdet!= null)
             {

                 gvDetails.DataSource = objdet;
                 gvDetails.DataBind();
             }

在我的网格中我有这个:

 <asp:GridView ID="gvDetails" runat="server" AllowPaging ="true" 
                AllowSorting ="true" AutoGenerateColumns="false" GridLines="None" CssClass="mGrid">
                <Columns>
                <asp:BoundField DataField="DetNumber" HeaderText="Number" ReadOnly="true" />
</Columns>
            </asp:GridView>
4

7 回答 7

1
string input = "1234567";
var output = new string(input.Select((c, i) => i < input.Length - 4 ? 'x' : c)
                             .ToArray());
于 2012-10-11T18:07:31.673 回答
1

设置一个辅助方法来处理格式而不是试图在页面前面塞满一堆代码是很有用的。因此,在页面前面实现一个模板字段,以便您可以手动绑定字段值并调用您的助手。

<asp:TemplateField HeaderText="My Field">
     <ItemTemplate>
         <asp:Label runat="server" ID="lblMyField" 
                Text='<%# CustomFormatter(Eval("MyField")) %>' />
     </ItemTemplate>
</asp:TemplateField>

然后对于自定义方法尝试这样的事情:

public string CustomFormatter(string input)
{
    if (input.Length < 5) return input;
     char[] characters = input.ToCharArray();
    for (int i = characters.Length - 5; i <= 0; i--)
    {
        characters[i] = 'X';
    }
   return new string(characters);
}
于 2012-10-11T15:56:04.833 回答
1

一种方法是向 Details 对象添加一个属性,如下所示:

public string Last4Digits
{
  //Return the last 4 digits
}

然后将网格绑定到该属性而不是您的 DetNumber。

于 2012-10-11T15:49:47.473 回答
1

从 gridview 获取您的值,然后将其应用于您的字符串:

var result = mystring.Substring(mystring.Length - Math.Min(4, mystring.Length));
   //this will show 4567 

如果您想在继续之前添加 Xs 并执行以下操作:

result="XXX" + result;
于 2012-10-11T15:52:03.943 回答
0

在您的 Details 对象中,添加另一个属性,例如NumberWithMask

public const int NumberWithMaskLength = 4;

public string DetNumber { get; set; }

public string NumberWithMask
{
    get
    {
        if (!string.IsNullOrEmpty(DetNumber) && DetNumber.Length > NumberWithMaskLength)
        {
            return new string('x', DetNumber.Length - NumberWithMaskLength ) + DetNumber.Substring(DetNumber.Length - NumberWithMaskLength );
        }
        return string.Empty;
    }
} 

然后使用相关的新字段BoundField

<asp:BoundField DataField="NumberWithMask" HeaderText="Number" ReadOnly="true" /> 
于 2012-10-11T15:50:05.520 回答
0

我建议你使用RowDataBound event

void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {

      var value = e.Row.Cells[1].Text;
      e.Row.Cells[1].Text = value.Substring(value.Length - 5, value.Length - 1);
    }
  }

添加活动

<asp:gridview onrowdatabound="GridView_RowDataBound"></asp:gridview>
于 2012-10-11T15:50:25.693 回答
0

我会Details像这样向你的类添加一个属性:

public class Details
{
    public int Number { get; set; }

    public string MaskedNumber
    {
        get
        {
            var temp = Number.ToString();

            if (temp.Length <= 4)
            {
                return temp;
            }

            return new string('x', temp.Length - 4) + temp.Substring(temp.Length - 4);
        }
    }
}

然后只需将其用作GridView. 然后,您还可以在任何其他可能使用Details该类的地方使用该功能。

编辑:对于长度 <= 4 的数字来说,它不会那么糟糕。

于 2012-10-11T15:53:00.153 回答