ASP.Net,Datagrid:根据值不同地渲染列?

时间:2012-04-08 20:07:01

标签: asp.net datagrid

我看了看,但我没有看到答案。

我有一个绑定到数据网格的日期时间值。我想将列显示为日期时间,或者如果所述日期时间为空,则为用户单击的asp:按钮。

我似乎无法找到有关如何操作的具体信息。我的初始方法是<%if blah blah then%>,但我似乎无法以这种方式在数据项目中获得。我也看了一下事件,但没有什么可以作为解决方案向我跳出来(我确定我错了,我只是没有看到它)。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

假设您实际上是GridView而不是DataGrid,否则它的工作方式类似(ItemDataBound等。)

您可以使用TemplateField LabelButton,并在RowDataBound中切换两个控件的可见性:

protected void Grid_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var row = ((DataRowView)e.Row.DataItem).Row;
        DateTime? date = row.Field<DateTime?>("DateColumn");
        var lblDate = (Label)e.Row.FindControl("LblDate");
        var btnDate = (Button)e.Row.FindControl("BtnDate");
        lblDate.Visible = date.HasValue;
        btnDate.Visible = !date.HasValue;
        if (date.HasValue) lblDate.Text = date.ToString();
    }
}

ASPX:

<asp:GridView ID="GridView1" AutoGenerateColumns="false" OnRowDataBound="Grid_RowDataBound" runat="server">
<Columns>
    <asp:TemplateField HeaderText="DateColumn">
        <ItemTemplate>
            <asp:Label ID="LblDate" runat="server"></asp:Label>
            <asp:Button ID="BtnDate" Text="click me" runat="server"  />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>
</asp:GridView>

答案 1 :(得分:0)

如果您使用的是ASP.NET 3.5或更高版本,则应使用Gridview。使用templatefield列添加按钮和标签。在rowdatabound事件中,您应该只显示按钮或标签,使用Visible属性,具体取决于是否有日期。