我正在编写一个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类。数据网格将具有相同的列。
答案 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();
}
}
}