使用 Asp.net 处理数据库中的值

Process A Value From The Database Using Asp.net

在我的数据库中,我在数据库字段中将水果表示为 1 表示苹果,2 表示橙子,3 表示梨。

我的问题是当我在页面上使用我的 GridView 输出它时它显示“1,2,3”等等,当我希望它显示数字代表的水果时。

我想要的是如果(fruit==1)显示"Apple"等等

我可以在 .aspx 页面中执行此操作吗?

您可以在类中创建一个 getter 属性,它将根据值决定显示什么。可能是这样的:

public string FruitName
{
   get
   {
       switch(someOtherField)
       {
           default:
           case 1:
             return "Apple";
           case 2:
             return "Orange";
           // ... 
       }
   }
}

然后您可以使用此 属性 来向用户展示它。

当然,如果您的问题只是数据库中的值与您要向用户显示的值不匹配的示例。如果情况并非如此,并且它是您应用程序的实际示例,那么您绝对应该在数据库 table 设计、关系等方面投入更多工作。

我建议您的数据库包含带有 ID 和名称列的 Fruit Table,并且您可以从数据库中获取值。

在 table 中输入水果名称的字段。

Sql 咨询可能看起来像这样。

Select fruit_name from fruits where id = (1 or 2 or 3)

在这种情况下最好的做法是创建一个枚举类型,它将数字分配给水果名称。

enum Fruit
    {   
        Apple=1, // Assigned integer value = 1 to apple
        Guava=2,    
        Banana=3
    };

public Fruit FruitName
{
             get;   // Auto implemented prop. of type Enum
             set;  
}

通过这种方式,您可以将数据库整数值与水果名称进行比较

switch(value_from_database)
       {
           default:
           case 1:
             return Fruit.Apple;
           case 2:
             return Fruit.Guava;
           // ... so-on
       }

您可以使用包含标签的模板字段。步骤如下:

  1. 添加与包含标签的水果关联的模板字段。(例如 lblFruit)
  2. 关联GridView的OnRowDataBound事件
  3. 实现事件(C#)如下:

    protected void gvFruits_RowDataBound(object sender, GridViewRowEventArgs e) {

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label lblFruit = e.Row.FindControl("lblFruit") as Label;
        switch(value_from_database)
        {
           default:
           case 1:
             lblFruit.Text = "Apple";
           case 2:
             lblFruit.Text = "Orange";
           // ... 
        }
    }
    

    }

要获取与行关联的当前记录,您可以使用e.Row.DataItem 属性。 显示了一个很好的讨论 here (citronas' answer)