【问题标题】:SQL usertype IssueSQL 用户类型问题
【发布时间】:2015-03-07 22:11:24
【问题描述】:

我使用SQL query 来定义表中用户的角色。例如:-

1 -- 超级管理员

2 -- 管理员

3 -- 用户

在gridview中,我想将文本显示为Super AdminAdmins,但我仍然得到012

请帮忙

代码:-

SELECT (
        CASE WHEN usertype =1 THEN 'Admin' 
              WHEN usertype=0 THEN 'Super Admin' 
              WHEN usertype=2 THEN 'User' END ) aS usertype 
FROM tbl_User

Gridview aspx 代码:-

<asp:GridView ID="grdUser" AllowPaging="true" AutoGenerateColumns="False"
            OnDataBound="grdUser_DataBound" OnRowDeleting="grdUser_RowDeleting"
            OnPreRender="PreRenderGrid" runat="server" Width="100%"
            border="1" DataKeyNames="Id" PageSize="2"
            OnPageIndexChanging="grdUser_PageIndexChanging"
            EnableSortingAndPagingCallbacks="false"
            CssClass="pagi" OnRowCommand="grdUser_RowCommand">
            <Columns>
                <asp:BoundField DataField="username" HeaderText="UserName" 
                         ItemStyle-Width="30" HeaderStyle-CssClass="k-grid td">
                    <HeaderStyle CssClass="k-grid td"></HeaderStyle>
                    <ItemStyle Width="30px"></ItemStyle>
                </asp:BoundField>
                <asp:BoundField DataField="usertype" HeaderText="UserType" 
                           ItemStyle-Width="30" HeaderStyle-CssClass="k-grid td">
                    <HeaderStyle CssClass="k-grid td"></HeaderStyle>
                    <ItemStyle Width="30px"></ItemStyle>
                </asp:BoundField>                    
            </Columns>
 </asp:GridView>

【问题讨论】:

  • @Mihai:查看更新的问题
  • 你的列中的数据是 int 还是其他?查询对我来说很好
  • @Mihai:我给的专栏是varchar
  • 然后对数字使用引号,在mysql中可以工作,sql server更严格。 CASE WHEN usertype ='1' 发生的情况是 sql server 找不到任何等于数字的东西并返回 NULLs.Assuming sql server.Or 更好的是将您的列更改为 int
  • @Mihai:好吧,让我改变

标签: c# sql asp.net sql-server gridview


【解决方案1】:

在 Grid 事件 RowDatabound 下,您必须处理此问题,否则您的 SQL 查询将返回 RoleDescription 以及 roleID,然后将其绑定到 Grid 上

对于 RowDataBound 事件:-

protected void ctrlGrid_ItemDataBound(object sender, GridItemEventArgs e)
  {
     //add three case like this
    if (dataBoundItem["usertype"].Text == "1")
     Label lblUserType = (dataBoundItem["UserType"].FindControl("lblUserType") as Label);
     lblUserType.Text = "Admin";

 }

编辑:-

根据您的sql查询,我必须说更改您的别名并添加单引号

SELECT Id,username,email,usertype,active, 
CASE WHEN usertype ='1' THEN 'Admin' 
WHEN usertype='0' THEN 'Super Admin' 
WHEN usertype='2' THEN 'User' END ) AS usertypeDescription 
from tbl_User ORDER By Id DESC

然后改变

 <asp:BoundField DataField="usertypeDescription" HeaderText="UserType" 
                       ItemStyle-Width="30" HeaderStyle-CssClass="k-grid td">
    <HeaderStyle CssClass="k-grid td"></HeaderStyle>
       <ItemStyle Width="30px"></ItemStyle>
 </asp:BoundField>

【讨论】:

  • OK..下面需要添加什么?
  • 所以只有我必须更改 aspx 或两者都更改?
  • 更改sql查询(从答案中获取查询)并更改aspx
猜你喜欢
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
相关资源
最近更新 更多