在GridView ASP / C#的单元格/列中映射值

时间:2016-04-13 17:43:38

标签: c# sql asp.net gridview

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

-O3

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

2 个答案:

答案 0 :(得分:3)

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

例如,如果您的Orders表包含字段OrderIDClientIDPricePaymentTypeID

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

包含字段ClientsClientID的<{1}}表格:

ClientName

包含字段ClientID ClientName 2 Woolworth 3 Dairy Queen 6 Dominion Groceries 8 Miracle Mart PaymentType的{​​{1}}表:

PaymentTypeID

然后查询可能如下所示:

Description

在GridView中,您可以显示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 Orders

ClientName

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

ClientName       Price    PaymentDescription
Miracle Mart     40.50         Visa
Woolworth       128.43         Cash

并获得这样的值:

DataKeyNames

答案 1 :(得分:0)

您是否拥有与现在正在检索的属性相对应的Model属性?

例如,如果调用此属性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 */

    )