当我进入编辑模式时,为什么我的日历控件会消失?

时间:2011-12-08 10:24:19

标签: c# asp.net gridview

在我的项目中,我正在跟踪我有预期日期和实际日期的截止日期。所有信息都存储在SQL Server 2008数据库中。

始终输入预期日期,但实际日期不是。当我在GridView进入编辑模式时,这给了我一个错误,因此我将所有实际日期设置为固定日期(1990-01-01)。

我打算在我的RowDataBound函数中检查该固定日期。如果找到,我会用空字符串替换该日期(当然只在GridView而不是在我的数据库中)。但是当我这样做并进入编辑模式时,我的日历控件就会消失。我该如何解决这个问题?

编辑:

ASPX代码:

<asp:TemplateField HeaderText="Actual Date" SortExpression="Actual_Date">
    <EditItemTemplate>
        <asp:Calendar ID="cal_act_date" runat="server" 
            VisibleDate='<%# DateTime.Now %>' 
            SelectedDate='<%# Bind("Actual_Date") %>' BackColor="White" 
            BorderColor="#999999" CellPadding="4" DayNameFormat="Shortest" 
            Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" Height="180px" 
            Width="200px">
            <SelectedDayStyle BackColor="#666666" Font-Bold="True" ForeColor="White" />
            <SelectorStyle BackColor="#CCCCCC" />
            <WeekendDayStyle BackColor="#FFFFCC" />
            <TodayDayStyle BackColor="#CCCCCC" ForeColor="Black" />
            <OtherMonthDayStyle ForeColor="#808080" />
            <NextPrevStyle VerticalAlign="Bottom" />
            <DayHeaderStyle BackColor="#CCCCCC" Font-Bold="True" Font-Size="7pt" />
            <TitleStyle BackColor="#999999" BorderColor="Black" Font-Bold="True" />
        </asp:Calendar>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="lbl_act_date" runat="server" Text='<%# Bind("Actual_Date", "{0:d}") %>'>
        </asp:Label>
    </ItemTemplate>
</asp:TemplateField>

代码隐藏:

protected void GV_Milestones_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["testServer"].ConnectionString);

        conn.Open();

        SqlCommand cmd_getActDate = new SqlCommand(@"SELECT [ms_tr_actual_date] 
                                                  FROM [NSBP].[dbo].[tbl_milestones_tracking]
                                                  WHERE [ms_id] = " + e.Row.Cells[1].Text + 
                                                  @" AND [ms_tr_bill_run] = '" + DDL_billrun.SelectedValue + "'", conn);
        string value = Convert.ToString(cmd_getActDate.ExecuteScalar());

        if (value.ToString() == "01/01/1990 00:00:00")
        {
            e.Row.Cells[7].ForeColor = Color.White;
        }

        conn.Close();
        conn.Dispose(); 
    }
}

1 个答案:

答案 0 :(得分:0)

您需要首先检查日期是否为“1-1-1990”,然后在所选日期属性中显示空字符串。 您可以使用以下代码执行此操作: -

SelectedDate='<%# Convert.ToDateTime(Eval("Actual_Date")).ToString() == "01-01-1990" ? "" : Eval("Actual_Date")  %>'

//“01-01-1990”是日期,您在数据库中输入