如何使用gridview中的datatable和datarow计算两个日期之间的天数?

时间:2013-11-19 10:05:58

标签: c# asp.net

public void BindGrid(int rowcount)
{
    btnsubmit.Visible = true;
    DataTable dt = new DataTable();
    DataRow dr;
    dt.Columns.Add(new System.Data.DataColumn("Employee ID", typeof(String)));
    dt.Columns.Add(new System.Data.DataColumn("Leave Type", typeof(String)));
    dt.Columns.Add(new System.Data.DataColumn("From", typeof(String)));
    dt.Columns.Add(new System.Data.DataColumn("To", typeof(String)));
    dt.Columns.Add(new System.Data.DataColumn("No:of Days", typeof(String)));


    if (ViewState["CurrentData"] != null)
    {
        for (int i = 0; i < rowcount + 1; i++)
        {
            dt = (DataTable)ViewState["CurrentData"];
            if (dt.Rows.Count > 0)
            {
                dr = dt.NewRow();
                dr[0] = dt.Rows[0][0].ToString();

            }
        }
        dr = dt.NewRow();
        dr[0] = lblempID.Text;
        dr[1] = ddlleavetype.SelectedItem.Text.ToString();
        dr[2] = txtfrom.Text.ToString();
        dr[3] = txtto.Text.ToString();

        dt.Rows.Add(dr);

    }
    else
    {
        dr = dt.NewRow();
        dr[0] = lblempID.Text;
        dr[1] = ddlleavetype.SelectedItem.Text.ToString();
        dr[2] = txtfrom.Text.ToString();
        dr[3] = txtto.Text.ToString();

        dt.Rows.Add(dr);

    }

    // If ViewState has a data then use the value as the DataSource
    if (ViewState["CurrentData"] != null)
    {
        gvLeave.DataSource = (DataTable)ViewState["CurrentData"];
        gvLeave.DataBind();
    }
    else
    {
        // Bind GridView with the initial data assocaited in the DataTable
        gvLeave.DataSource = dt;
        gvLeave.DataBind();

    }
    // Store the DataTable in ViewState to retain the values
    ViewState["CurrentData"] = dt;


}

在我的页面中,从日期文本框和todate textbox ..我想计算两个日期之间,请帮助我

3 个答案:

答案 0 :(得分:1)

如果它们位于文本框中,则需要先使用DateTime.Parse解析它们。这是假设字符串格式正确

DateTime myDate = DateTime.Parse(myDateString);

要计算两个日期之间的天数,您可以尝试这个

TimeSpan span =date1-date2;
var days = span.TotalDays;

答案 1 :(得分:1)

我对DataTable对象不太熟悉,所以把这个答案作为一个想法。 : - )

为什么不指定具有实际类型的行?

dt.Columns.Add(new System.Data.DataColumn("From", typeof(DateTime)));
dt.Columns.Add(new System.Data.DataColumn("To", typeof(DateTime)));
dt.Columns.Add(new System.Data.DataColumn("No:of Days", typeof(int)));

在此之后,您可以解析txtfrom的{​​{1}}数据,并将其分配给您的DataRow。同样适用于txtto。

在此之后,您可以使用以下方法计算日期:

dr[2] = DateTime.Parse(txtfrom.Text.ToString())

如果这不起作用,请尝试将解析后的日期保存在以下对象中:

dr[4] = (int)((dr[2] -dr[3]).TotalDays);

答案 2 :(得分:0)

试用此代码:

Var Day= DateTime.Parse(todate.Text).Subtract(DateTime.Parse(fromdate.Text)).Days;