在2个日期之间搜索并使用ObjectDataSource更新GridView

时间:2013-12-04 19:00:56

标签: c# asp.net gridview objectdatasource

我正在编写一个ASP.NET应用程序,它有一个GridView,它使用ObjectDataSource来填充来自REST调用填充的对象列表中的数据。我还需要能够使用“搜索”按钮在两个日期之间进行搜索,这需要我对另一个URL进行REST调用。数据具有相同的结构,它只设置在2个日期之间。

这是我用来设置DataGrid的代码,这是SorRepository类。方法Select()被用作我的ObjectDataSource的选择代码:

namespace SorDowntimeWebApp.Models
{
    public class SorRepository
    {
        public List<SorEvent> Select()
        {
            // this URL gets the last 30 days of information
            string url = new WebClient().DownloadString(@"http://osw-hml3mes.novelis.biz:3020/Preheat/Downtime/History/30");
            List<SorEvent> events = JsonConvert.DeserializeObject<List<SorEvent>>(url);
            events = events.OrderByDescending(e => e.StartTime).ToList();
            return events;
        }
    }
}

这是上述方法使用的SorEvent类:

public class SorEvent
{
    public long Id { get; set; }
    public string Furnace { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime? EndTime { get; set; }
    public string MachineCode { get; set; }
    public string ReasonCode { get; set; }
    public string SubsystemCode { get; set; }
    public string ForceScheduleFlag { get; set; }
    public string OperatorComments { get; set; }
}

那部分工作正常。我只需要在用户选择2个日期后更新GridView。

这是我在按钮点击时尝试过的代码,按钮ID是btnSearch:

protected void btnSearch_Click(object sender, EventArgs e)
{
    string startDate = txtStartDate.Text;
    string endDate = txtEndDate.Text;
    // this url gets the data from a specified range
    string url = @"http://osw-hml3mes.novelis.biz:3020/Preheat/Downtime/HistoryByDate?startDate=" +
                 startDate + "&endDate=" + endDate;
    List<SorEvent> events = JsonConvert.DeserializeObject<List<SorEvent>>(new WebClient().DownloadString(url));
    GridView1.DataSource = events;
    GridView1.DataBind();
}

txtStartDate&amp; txtEndDate都是使用Jquery UI日期选择器的文本框。

我尝试在我的SorRepository类中使用Update函数但是没有用。

另外,请注意,当我执行此搜索并调用url时,它将使用与Select()方法相同的SorEvent类。数据网格将具有相同的列。

1 个答案:

答案 0 :(得分:0)

这是我提出的解决方案。我需要从DataSourceId中删除ObjectDataSource,并在Page_Load方法中设置GridView的数据。这是我现在的代码:

public partial class SORGrid : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string url = @"http://osw-hml3mes.novelis.biz:3020/Preheat/Downtime/History/30";
        List<SorEvent> events = JsonConvert.DeserializeObject<List<SorEvent>>(new WebClient().DownloadString(url));
        events = events.OrderByDescending(ev => ev.StartTime).ToList();
        if (!IsPostBack)
        {
            GridView1.DataSource = events;
            GridView1.DataBind();
        }
    }

    protected void btnSearch_Click(object sender, EventArgs e)
    {
        // get dates and call the url with those 2 dates (POST call)
        string startDate = txtStartDate.Text;
        string endDate = txtEndDate.Text;
        string url = @"http://osw-hml3mes.novelis.biz:3020/Preheat/Downtime/History/30";
        if(startDate != "" || endDate != "")
            url = @"http://osw-hml3mes.novelis.biz:3020/Preheat/Downtime/HistoryByDate?startDate=" +
                     startDate + "&endDate=" + endDate;
        List<SorEvent> events = JsonConvert.DeserializeObject<List<SorEvent>>(new WebClient().DownloadString(url));
        events = events.OrderByDescending(ev => ev.StartTime).ToList();
        if (IsPostBack)
        {
            GridView1.DataSource = events;
            GridView1.DataBind();
        }

    }
}