【问题标题】:Gridview must show Text instead of the Value from the databaseGridview 必须显示文本而不是数据库中的值
【发布时间】:2016-09-21 06:58:23
【问题描述】:

我有一个从数据库中获取数据的网格视图。
这是 .NET 代码。有很多栏目,这里的模板是:Choice 就是我所说的那个。

<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";
        }
    }
}

但它不起作用。我错过了什么吗?我必须在&lt;ItemTemplate&gt; 标签中包含一些内容吗?

【问题讨论】:

  • @iceDragon 我实际上已经尝试过那篇文章中的 RowDataBound 事件,但恐怕没有指出如何将其调用到 .Net 的答案?你知不知道怎么?谢谢(我也会编辑这个问题并包括这个)
  • 像这样将事件添加到 GridView 工具 ​​
  • 谢谢!可能我还需要 20 个声望,所以我可以对这个问题发表评论,询问我还需要添加什么,所以它只有 OnRowDataBound="GridView1_RowDataBound"
  • 不客气,是的,就是这样,您在 gridView 标记中添加事件调用,然后编辑代码以满足您的要求。我认为您的代码应该运行顺畅。你还有什么问题吗?

标签: c# asp.net gridview


【解决方案1】:

据我了解,您可以使用渲染属性函数或行数据绑定事件。

RenderProperty Function

RowDataBound Event

两个答案都来自这个question

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

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

【讨论】:

  • 当。我已经添加了它,就是这样!就这么容易! ughhh谢谢队友,你救了我:D
【解决方案2】:

不使用 RowBound 事件你可以做到这一点

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

【讨论】:

  • 谢谢,我试过了,我在 .equals 上有错误,我可能会错过什么?我必须添加任何参考或任何东西吗?再次感谢
  • 我试过了,我得到了错误:“名称'Bind'在当前上下文中不存在”,我尝试用Eval而不是Bind替换它,它现在运行但只给出结果=不,即使我在上下文中有 1/是。
  • 如果您能进一步帮助我,那就太好了,我刚刚发现我的一些代码与 RowDataBound 事件不兼容,并且在运行时出现错误
  • 我明白了,这就是我所做的:Text='&lt;%# Eval("Served").ToString()== "1" ? "Yes" : "No" %&gt;'&gt; 非常感谢伙计!
  • 在我之前的评论中,它说:“名称'绑定'在当前上下文中不存在”并且我的程序不会运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2011-11-05
  • 1970-01-01
相关资源
最近更新 更多