【问题标题】:Mapping values in cells/column of GridView ASP/C#GridView ASP/C#的单元格/列中的映射值
【发布时间】:2016-04-13 17:43:38
【问题描述】:

我在 ASP/C# 中有一个 grideview,里面填满了来自 SQL 数据源的数据。某些列包含一个 ID(整数),其中每个列都有不同的映射。我想显示映射值而不是整数。例如,GrideView 中的第一列显示 1、2、3、4(与 DB 完全相同)。但相反,我想根据映射将其作为字符串显示给用户:

1 = Cash
2 = Money Transfer
3 = Visa
4 = etc

如何在 C# 中执行此操作而不在我的 select 语句中涉及 CASE 功能?

【问题讨论】:

  • 你的数据库表中有映射吗?如果是这样,您可以在查询中使用 'INNER JOIN`s 来获取与每个 ID 对应的字符串。
  • 是的。对于大多数映射,我确实将它们的描述放在不同的表中。我该怎么做。我对sql高级查询不太熟悉。谢谢

标签: c# sql asp.net gridview


【解决方案1】:

如果映射存储在您的数据库中,您可以在查询中使用INNER JOIN 来获取映射值。

例如,如果您有一个Orders 表,其中包含OrderIDClientIDPricePaymentTypeID 字段:

OrderID   ClientID  Price   PaymentTypeID
   3          8      40.50       3
   4          2     128.43       1

一个Clients 表,其中包含ClientIDClientName 字段:

ClientID  ClientName
   2      Woolworth
   3      Dairy Queen
   6      Dominion Groceries
   8      Miracle Mart

还有一个PaymentType 表,其中包含PaymentTypeIDDescription 字段:

PaymentTypeID  Description
     1         Cash
     2         Money transfer
     3         Visa

那么查询可能如下所示:

SELECT
    O.*,
    C.ClientName,
    PT.Description AS PaymentDescription
FROM
    Orders O
    INNER JOIN Clients C ON C.ClientID = O.ClientID
    INNER JOIN PaymentType PT ON PT.PaymentTypeID = O.PaymentTypeID

在您的 GridView 中,您可以显示 Orders 表中的一些字段,也可以显示查询返回的字段 ClientNamePaymentDescription

ClientName       Price    PaymentDescription
Miracle Mart     40.50         Visa
Woolworth       128.43         Cash

ID 本身通常不会显示给用户。如果您需要它们的值在代码隐藏中进行某些处理,您可以将它们添加到 GridView 的DataKeyNames

<asp:GridView ID="gvOrders" DataKeyNames="OrderID,ClientID,PaymentTypeID" ... >

并像这样获取它们的值:

gvOrders.DataKeys[rowIndex].Values["PaymentTypeID"]

【讨论】:

    【解决方案2】:

    您是否有与当前正在检索的属性相对应的模型属性?

    例如,如果此属性称为PaymentOptionID,则应该有一个对应的String 来保存PaymentOptionDescription。然后,当您从数据库返回您的记录集时,请改为为 gridview 的列分配 string 属性。下面的例子:

    型号

    public class PaymentOption
    {
        public int PaymentOptionID {get; set;}
        public string PaymentOptionDescription {get; set;}
    }
    

    数据库选择语句

    SELECT
            [fldPaymentOptionID]
            ,[fldPaymentOptionDescription]
            ,[fldMyOtherFields]
    FROM    [tblPaymentOptions]
    

    控制器方法

    public ViewResult GetPaymentOptionGridViewSource()
    {
        PaymentOption myPaymentOptions = new PaymentOption();
    
        Viewbag.PaymentOptionGridSource = myPaymentOptionsMethodToGetDBRecords();
    
        return View();
    }
    

    查看

    @{    
    List<PaymentOption> myPaymentOptionList = ViewBag.PaymentOptionGridSource;
    
    WebGrid paymentOptionWebGrid = new WebGrid(
        null,
        canPage: true,
        defaultSort: "ID"
        );
    paymentOptionWebGrid.Bind(
        myPaymentOptionList,
        autoSortAndPage: true
        );
    }
    
    @paymentOptionWebGrid.GetHtml (
    tableStyle: "table table-hover table-bordered table-responsive",
    
    columns: paymentOptionWebGrid.Columns(
        paymentOptionWebGrid.Column("PaymentOptionDescription", "Payment Method", style: "span1", canSort: false),
        paymentOptionWebGrid.Column("MyPaymentOptionModelPropertyHere", "My Column Header Here", style: "span2", canSort: false),
    
        /* Same logic for all other columns as above */
    
        )
    

    【讨论】:

    • 谢谢。我确实在不同的表中有描述。如果数据绑定是在页面加载时完成的,我将如何进行映射。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2012-04-11
    • 1970-01-01
    相关资源
    最近更新 更多