Gridview必须显示Text而不是数据库中的Value

时间:2016-09-21 06:58:23

标签: c# asp.net gridview

我有一个从数据库中获取数据的gridview 这是.NET代码。有很多专栏,这里是模板:选择是我正在谈论的那个。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"  AllowPaging="True" CellPadding="4" DataKeyNames="EmpID" ForeColor="#333333" GridLines="None" style="margin-right: 81px" Width="1174px" >
       <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
       <Columns>
<asp:TemplateField HeaderText="Choice" SortExpression="Choice">
        <EditItemTemplate>
                   <asp:DropDownList ID="DropDownChoice" Text='<%# Bind("Choice") %>' runat="server"  Width="60px">
                           <asp:ListItem Text="No" Value="0"></asp:ListItem>
                           <asp:ListItem Text="Yes" Value="1"></asp:ListItem>
                   </asp:DropDownList>
        </EditItemTemplate>
        <ItemTemplate>
                   <asp:Label ID="lblChoice" runat="server" Text='<%# Bind("Choice") %>'></asp:Label>
        </ItemTemplate>
</asp:TemplateField>

在EditItemTemplate上,用户可以编辑数据库上的所述数据。我可以使用下拉列表并将文本显示为No或Yes,但将保存在数据库中的值仍为0和1.

<EditItemTemplate>
      <asp:DropDownList ID="DropDownChoice" Text='<%# Bind("Choice") %>' runat="server"  Width="60px">
                        <asp:ListItem Text="No" Value="0"></asp:ListItem>
                        <asp:ListItem Text="Yes" Value="1"></asp:ListItem>
      </asp:DropDownList>
</EditItemTemplate>

一旦运行,我就无法在Gridview上显示文本No和Yes。正如您在这里看到的那样是ItemTemplate代码:

<ItemTemplate>
      <asp:Label ID="lblChoice" runat="server" Text='<%# Bind("Choice") %>'></asp:Label>
</ItemTemplate>
  

一旦执行,请建议在ItemTemplate / Gridview部分显示No / Yes的方法/方法。谢谢(如果您需要C#代码来绑定gridview上的数据,请告诉我们)

注意: 我已经尝试了在此question中回答的RowDataBound事件。 这是代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        System.Data.DataRow dr = ((System.Data.DataRowView)e.Row.DataItem).Row;

        if (dr["Choice"].ToString() == "0")
        {
            ((Label)e.Row.FindControl("lblChoice")).Text = "No";
        }
        else if (dr["Choice"].ToString() == "1")
        {
            ((Label)e.Row.FindControl("lblChoice")).Text = "Yes";
        }
    }
}

但它不起作用。我错过了什么吗?我是否必须在<ItemTemplate>代码中添加内容?

2 个答案:

答案 0 :(得分:1)

据我所知,您可以使用Render Property函数或行数据绑定事件。

RenderProperty Function

RowDataBound Event

这两个答案均来自此question

编辑:当您询问如何调用RowDataBound事件时,它会添加到GridView标记中,如下所示:

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"></asp:GridView>

答案 1 :(得分:1)

不使用RowBound事件就可以执行此操作

<ItemTemplate>
  <asp:Label ID="lblChoice" runat="server" 
             Text='<%# Bind("Choice").Equals("1")? "Yes" : "No" %>'></asp:Label>
</ItemTemplate>