我想在GridView中更改特定条件下单元格的文本/值。当我从数据库绑定Gridview时,我有一个返回'P','A','R'的单元格。我希望在“P”的情况下显示“待定”,在“A”的情况下显示“已批准”,在使用更新按钮的下拉列表中显示“已拒绝”时显示“已拒绝”。我想改变记录的状态。
如何更改文本并在绑定数据时执行所需的任务。
<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>
答案 0 :(得分:0)
解决此问题的方法是处理RowDataBound事件。它每行引发一次(也是页眉和页脚行,因此您需要筛选类型为DataRow
的行)。您可以使用它来调整显示的数据或显示的方式。您还可以在事件中设置DropDown的值。请参阅示例链接。
为了将DropDown-column添加到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>
在Code-behind中,我定义了一个名为DataClass
的类,其中包含数据(您也可以使用DataTable,但对于示例,使用类更容易生成一些数据)。此外,字典包含从短状态到长文本的映射。
在Page_Load
中,设置了字典,如果没有PostBack,则绑定数据。
最后,在gdv_RowDataBound
中,为每一行设置标签,并初始化DropDownList。请注意,使用FindControl
检索行的Label和DropDownList。
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;
}
}
}
如果您有任何问题,请在评论中告诉我。