如何在DataGrid中基于另一个字段显示某些数据字段

本文关键字:字段 显示 数据 另一个 DataGrid | 更新日期: 2023-09-27 17:53:12

我有一个表单,用户可以填写3种不同的成本,然后点击一个复选框并批准其中一种成本。然后批准的成本需要显示在DataGrid

上。DataGrid代码:
<asp:DataGrid CssClass="tblResults" runat="server" ID="dgDetails" OnItemDataBound="dgDetails_ItemDataBound" DataKeyField="ID" AutoGenerateColumns="false" style="display:none">
<HeaderStyle CssClass="tblResultsHeader" />
<AlternatingItemStyle BackColor="#EEEEEE" />
 <Columns>                                       
        <asp:BoundColumn DataField="Code" HeaderText="Code"></asp:BoundColumn>
        <asp:BoundColumn DataField="Cost" HeaderText="Cost"> </asp:BoundColumn>
         <asp:HyperLinkColumn DataNavigateUrlFormatString="javascript:deleteDetail({0})" DataNavigateUrlField="ID" HeaderText="Delete" DataTextField="ID" ItemStyle-CssClass="tblRowDelete" ></asp:HyperLinkColumn>                                       
  </Columns>

背后的代码:

protected void dgDetails_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    if (e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Footer && e.Item.ItemType != ListItemType.Pager)
    {
        Quote.QuoteDetails qd = (Quote.QuoteDetails)e.Item.DataItem;
        e.Item.Attributes.Add("ID", "dgDetails_" + qd.ID);
        e.Item.Attributes.Add("class", "dgDetailsRow");
        e.Item.ToolTip = "Click here to Edit Detail";
}

问题是在DataGrid中显示正确的成本。现在它正在显示数据字段Cost。但是如果第二个Cost已经被批准,那么我需要显示数据字段Cost2。是否有办法在DataGrid中使用if语句来检查哪些成本已被批准?比如:

if(approved1.checked)
{
   <asp:BoundColumn DataField="Cost" HeaderText="Cost"> </asp:BoundColumn>
}
else if (approved2.checked)
{
    <asp:BoundColumn DataField="Cost2" HeaderText="Cost"> </asp:BoundColumn>
}

可以在DataGrid中添加if语句吗?或者是否有一种方法可以从后面的代码中做到这一点?

如何在DataGrid中基于另一个字段显示某些数据字段

我会使用后面的代码和模板列。

<asp:TemplateColumn>
    <ItemTemplate>
        <asp:Label ID="lblCost" runat="server"></asp:Label>
    </ItemTemplate>
</asp:TemplateColumn>

后面的代码类似于:

protected void dg1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    Label lblCost;
    Quote.QuoteDetails qd = (Quote.QuoteDetails)e.Item.DataItem;
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        lblCost = (Label)e.Item.FindControl("lblCost");
        if (qd.Approved1)
            lblCost.Text = string.Format("{0:0.00", qd.Cost);
        else if (qd.Approved2)
            lblCost.Text = string.Format("{0:0.00", qd.Cost2);
        else
            throw new NotImplementedException("oops!");
    }
}