【问题标题】:How to change the text on certain condition in GridView?如何在 GridView 中更改特定条件下的文本?
【发布时间】:2014-03-08 16:02:55
【问题描述】:

我想在 GridView 的特定条件下更改单元格的文本/值。当我从数据库绑定 Gridview 时,我有一个返回“P”、“A”、“R”的单元格。我想在“P”的情况下显示“待定”,在“A”的情况下显示“已批准”,在带有更新按钮的下拉菜单中显示“R”的情况下的“拒绝”。我想更改记录的状态。

如何在绑定数据时更改文本并执行所需的任务。

<asp:TemplateColumn> 
  <HeaderStyle CssClass="bgB white p5 b treb ttu w10" />
  <HeaderTemplate> 
    <asp:Label ID="lblstatus" runat="server" Text="Status"></asp:Label>       
  </HeaderTemplate> 
  <ItemTemplate> 
    <asp:Label ID="lblrmastatus" runat="server" Text='<%# Bind("RMA_STATUS") %>'>
    </asp:Label> 
  </ItemTemplate> 
</asp:TemplateColumn>

【问题讨论】:

  • 请提供一些代码
  • 在提供代码时,将其作为编辑,而不是作为评论。
  • 谢谢,其实我是这个网站的新手。
  • 你好安德斯,你能帮我解决这个问题吗?

标签: c# asp.net gridview


【解决方案1】:

解决此问题的一种方法是处理RowDataBound 事件。它每行引发一次(还有页眉和页脚行,因此您需要过滤DataRow 类型的行)。您可以使用它来调整显示的数据或显示方式。您还可以在事件中设置 DropDown 的值。示例见链接。

为了将 DropDown 列添加到 GridView,请使用 TemplateColumn 并将 DropDown 放入 ItemTemplate。访问 RowDataBound 事件处理程序中的相应单元格。使用 FindControl 方法检索 DropDown 控件并设置其值。


以下示例展示了如何以编程方式设置 Label 和 DropDownList:

网格视图

GridView 显示原始状态和带有长文本、DropDownList 和命令列的新状态以更新数据。

<asp:GridView ID="gdv" runat="server" 
              OnRowDataBound="gdv_RowDataBound" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="RMAStatus" HeaderText="Original RMA Status" />
        <asp:TemplateField HeaderText="Adjusted RMA Status">
            <ItemTemplate>
                <asp:Label ID="lblStatus" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="New Status">
            <ItemTemplate>
                <asp:DropDownList ID="ddlStatus" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowEditButton="true" />
    </Columns>
</asp:GridView>

代码隐藏

在代码隐藏中,我定义了一个名为 DataClass 的类,其中包含数据(您也可以使用 DataTable,但对于示例来说,使用类来生成一些数据更容易)。此外,字典包含从短状态到长文本的映射。

Page_Load中设置了字典,如果没有PostBack,则绑定数据。

最后,在gdv_RowDataBound中,为每一行设置了标签,并初始化了DropDownList。请注意,该行的 Label 和 DropDownList 是使用 FindControl 检索的。

public class DataClass
{
    public string RMAStatus { get; set; }
}

private readonly Dictionary<string, string> rmaStatusMappings = new Dictionary<string, string>();

protected void Page_Load(object sender, EventArgs e)
{
    rmaStatusMappings.Add("R", "Rejected");
    rmaStatusMappings.Add("A", "Approved");
    rmaStatusMappings.Add("P", "Pending");
    if (!IsPostBack)
    {
        var data = new DataClass[] {
            new DataClass() { RMAStatus = "P" }, 
            new DataClass() { RMAStatus = "A" }, 
            new DataClass() { RMAStatus = "R" }, 
            new DataClass() { RMAStatus = "P" }, 
        };
        gdv.DataSource = data;
        gdv.DataBind();
    }
}

protected void gdv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var rowStatus = ((DataClass)e.Row.DataItem).RMAStatus;
        // Set label to long status
        var lblStatus = e.Row.Cells[1].FindControl("lblStatus") as Label;
        if (lblStatus != null)
            lblStatus.Text = rmaStatusMappings[rowStatus];
        // Set drop down items
        var ddlStatus = e.Row.Cells[2].FindControl("ddlStatus") as DropDownList;
        if (ddlStatus != null)
        {
            ddlStatus.DataTextField = "Value";
            ddlStatus.DataValueField = "Key";
            ddlStatus.DataSource = rmaStatusMappings;
            ddlStatus.DataBind();
            ddlStatus.SelectedValue = rowStatus;
        }
    }
}

如果您有任何问题,请在 cmets 中告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-25
    • 2019-03-30
    • 2015-05-31
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多