我在ASP / C#中有一个grideview,它填充了来自SQL数据源的数据。某些列包含ID(整数),其中每个列都有不同的映射。我想显示映射的值而不是整数。例如,GrideView中的第一列显示1,2,3,4(完全与数据库相同)。但相反,我想根据映射将其作为字符串显示给用户:
-O3
如何在C#中执行此操作而不在我的select语句中包含CASE功能?
答案 0 :(得分:3)
如果映射存储在数据库中,则可以在查询中使用INNER JOIN
来获取映射值。
例如,如果您的Orders
表包含字段OrderID
,ClientID
,Price
和PaymentTypeID
:
OrderID ClientID Price PaymentTypeID
3 8 40.50 3
4 2 128.43 1
包含字段Clients
和ClientID
的<{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 */
)