0

私は何度も見ましたが、これに対する答えがわかりません。

データグリッドにバインドされている日時値があります。列を日時として表示するか、日時がnullの場合はユーザーがクリックするasp:ボタンとして表示したい。

その方法に関する具体的な情報を見つけることができないようです。私の最初のアプローチは <% if blah blah then %> でしたが、その方法でデータ項目を取得できないようです。私もイベントを見てきましたが、解決策として何も飛び出していません(私は間違っていると確信しています、私はそれを見ていないだけです)。

助言がありますか?

4

2 に答える 2

1

GridViewの代わりに実際に意味していると仮定するとDataGrid、そうでない場合は同様に機能します(ItemDataBoundなど)。

TemplateFieldaとaをLabel使用して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>
于 2012-04-08T20:31:11.773 に答える
0

ASP.NET 3.5 以降を使用している場合は、Gridview を使用する必要があります。templatefield 列を使用して、ボタンとラベルを追加します。rowdatabound イベントでは、日付があるかどうかに応じて、Visible プロパティを使用して、ボタンまたはラベルのみを表示する必要があります。

于 2012-04-08T21:03:21.110 に答える