0

Suppose that you have the following table:

LogID   UserID  Date                Action
1       Bob     2013-05-23 13:30:27 1
2       Bill    2013-05-23 13:31:36 1
3       Bob     2013-05-23 13:32:45 2
4       Bill    2013-05-23 13:35:12 2

You then create a GridView and populate it with the Date and Action columns:

Date                Action
2013-05-23 13:30:27 1
2013-05-23 13:31:36 1
2013-05-23 13:32:45 2
2013-05-23 13:35:12 2

What can you do so that (in the GridView) instead of displaying either 1 or 2 under Action, it displays Clock-In or Clock-Out, respectively?

Thanks in advance!


This is my query (the identifiers are irrelevant to the question). Where can I add a case statement here?

var Entries = from entries in db.EmployeeTimeClocks
              where entries.Date.Value.Day == DateTime.Now.Day &&
                    entries.UserId == AppCommon.Security.CurrentUser.UserId
              orderby entries.ID descending
              select entries;
4

4 回答 4

2

您可以使用 case 语句

http://sqlfiddle.com/#!6/aa91e/3

这是 SQL

SELECT LogID, UserId, Date,
CASE Action
WHEN 1 THEN 'Clock-In'
ELSE 'Clock-Out'
END
FROM MyTable

编辑

使用 LINQ to SQL,您将使用您的选择作为

var Entries = from entries in db.EmployeeTimeClocks
where entries.Date.Value.Day == DateTime.Now.Day &&
entries.UserId == AppCommon.Security.CurrentUser.UserId
orderby entries.ID descending
select new { 
    UserId = entries.UserId,
    //Other fields
    Clock = (entries.ClockId == 1 ? "Clock In" : "Clock Out")
};
于 2013-05-28T15:31:29.487 回答
1

您可以拥有模板列,然后像这样设置文本

<asp:TemplateField HeaderText="Action" >
    <ItemTemplate><%# (Eval("Action")==1) ? "ClockIn" : "ClockOut" %></ItemTemplate>
</asp:TemplateField>
于 2013-05-28T15:27:05.620 回答
1

第一的

我不知道你想用这个做什么。但是,如果您只有两个动作是 1 和 2(输入或输出),您应该称您为“Clocked-In”列并使其成为一种Bit类型。

现在

您应该在 SQL 端执行此操作。

您可以简单地创建另一个与此相关的表(ForeignKey):

Actions

  | ID  |  Name     |
  ------------------
  |1    | Clock-In  |
  |2    | Clock-Out |

您还可以使用返回正确名称的 case 语句更改您的查询。

我在这里没有您的查询,所以这只是一个示例:

SELECT CASE Action WHEN 1 THEN 'Clock-In' ELSE 'Clock-Out' END

在这种情况下,请确保只有两个可能的选项是 1 或 2。

于 2013-05-28T15:25:23.653 回答
1

如果您想使用代码隐藏,请尝试查看 GridView 的 RowDataBound 事件

    protected void GridView1_RowDatabound(object source, GridItemEventArgs e)
    {
        try
        {
            //Get Row Data
            //if(value == 1/2)                
            //re-assign to DataGrid's Row

        }
        catch (Exception exception)
        {
            //HandleException
        }
    }
于 2013-05-28T15:29:27.223 回答