我看了又看,我没有看到这个问题的答案。
我有一个绑定到数据网格的日期时间值。我想将该列显示为日期时间,或者如果所述日期时间为空,则为用户单击的 asp:button。
我似乎无法找到有关如何执行此操作的具体信息。我最初的方法是 <% if blah blah then %>,但我似乎无法以这种方式获取数据项。我也看过事件,但没有什么可以作为解决方案跳出来(我确定我错了,我只是没有看到它)。
有什么建议么?
假设您实际上是指GridView
代替DataGrid
,否则它会类似地工作(ItemDataBound
等等)。
您可以将 aTemplateField
与 aLabel
和 a一起使用,并在以下Button
位置切换两个控件的可见性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>
如果您使用的是 ASP.NET 3.5 或更高版本,则应该使用 Gridview。使用模板字段列,添加按钮和标签。在 rowdatabound 事件中,您应该使用 Visible 属性仅显示按钮或标签,具体取决于是否有日期。