2011-11-09 42 views
0

這個問題一直在嘮叨我好幾天了。這是的情況:使用AJAX和jQuery基於輸入加載數據網格

我有一個DataGrid沒有數據加載到它。我也有一個Input Text,它使用AJAXjQuery來顯示用戶在鍵入時可以選擇的值的現有列表。這是一個搜索系統,將根據用戶輸入的內容提取所有記錄。然後我有一個Input Button,按下時需要填入DataGrid。我需要的AJAX是爲了刷新DataGrid每次按下按鈕時不刷新整個頁面,因此輸入而不是asp。我的問題是讓JavaScript/* jQuery *調用將要使用的方法。我也需要它來獲得InputText的價值並將其用於搜索。這是我迄今爲止(不完整,需要幫助完成)。

數據網格(這是從另一DataGrid使用相同的數據複製,只是縮短。可能是不正確的編碼。)

<asp:DataGrid ID="Display" AutoGenerateColumns="false" ViewStateMode="Disabled" runat="server"> 
     <Columns> 
      <asp:TemplateColumn> 
       <HeaderTemplate> 
        Line</HeaderTemplate> 
       <ItemTemplate> 
        <asp:Label ID="LineNumber" Text='<%# DataBinder.Eval(Container.DataItem, "LineNumber") %>' 
         runat="server" /></ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn> 
       <HeaderTemplate> 
        Date</HeaderTemplate> 
       <ItemTemplate> 
        <asp:Label ID="CreateDate" Text='<%# DataBinder.Eval(Container.DataItem, "CreateDate", "{0: MM/dd/yyyy}") %>' 
         runat="server" /></ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn> 
       <HeaderTemplate> 
        Operator</HeaderTemplate> 
       <ItemTemplate> 
        <asp:Label ID="Operator" Text='<%# DataBinder.Eval(Container.DataItem, "Operator") %>' 
         runat="server" /></ItemTemplate> 
      </asp:TemplateColumn> 
     </Columns> 
    </asp:DataGrid> 

的JavaScript/jQuery的(這被放置在Button「的 「onclick」 事件。)

function refresh() { 
      $.ajax({ 
       type: "POST", 
       url: "WebForm1.aspx/PopulateGrid", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       error: function (result) { alert(result.status + ' ' + result.statusText); } 
      } 
      ); 
     }; 

代碼背後(我想嘗試和使用的代碼是後但如果需要處理程序,請讓我知道。)

[WebMethod] 
    protected void PopulateGrid() 
    { 
     using (Entities ent = new Entities(ConfigurationManager.ConnectionStrings["QCConnString"].ToString())) 
     { 
      string oper = Request.QueryString["getData"].ToString(); 
      AllDataSources ds = new AllDataSources(); 
      Display.DataSource = ds.refreshData(ent, oper); 
      Display.DataBind(); 
     } 
    } 

,因爲我更接近答案,或者已經來到了一個解決方案,我會更新這個。我真的希望有人能幫我解決這個問題。我奮鬥了這麼久。

+0

難道你不能只把按鈕和網格放在更新面板,並填充網格的方式? –

+0

我聽說使用MS AJAX不是一個好主意..所以我想盡量避免這種情況。但我會認爲這是最後的手段。 – SiSan

+0

你將需要一個異步回調來完成綁定,所以我認爲你沒有太多的選擇。您無法綁定客戶端上的DataGrid。如果MS AJAX是適合您的工作的工具,您應該使用它。 –

回答

0

這不能以你現在這樣做的方式完成。你將不得不使用asp.net更新面板來以ajax化的方式加載asp:datagrid。

我經常使用的另一個解決方案是擺脫asp:datagrid(如果您需要更多的支持ajax的網格)並使用jqGrid這是一個支持ajax的網格。這樣你可以可以使用jquery ajax發佈一個調用你的webmethods,它必須返回一個xml或json數據集。這裏有很多例子,例如this one是瞭解網格的一些基本知識的出發點。也不要忘了jqGrid的demo page

+0

呃,我真的不相信它不能做到。它可能無法做到這一點,但有另一種方式。不,我不會使用更新面板。我聽說使用MS AJAX是一個很大的不,不,所以我想只用它作爲最後的手段,如果可能的話。 我也不想從DataGrid改變。這是一個使用DataGrid的主要測試項目,我已經爲該DataGrid啓用了日期查找和分頁功能。可悲的是,頁面刷新,我不希望它。 但我一定會看看jqGrid。非常感謝你的建議。 :D – SiSan

+0

也許它可以做到,但以什麼價格(時間,金錢,解決方法,黑客,約束)?我從來沒有看到你想要的實現,快速搜索沒有給我很多希望。事實是,asp:datagrid只是不能成爲ajax控件。讓我們知道,如果你找到一些東西! –

+0

是的,這很好,它使得很多東西(分頁,搜索,更新,編輯等)變得容易很多,但是當涉及到AJAX時,它基本上是將AJAX翻轉並離開。 XD但我會嘗試更多的東西,我很固執。這個頁面並不是那麼大,所以如果說到這一點,讓它完全刷新並不是什麼大問題。 :) – SiSan

0

如果你要將下面的代碼放在一個通用處理程序(.ashx)中,這基本上會生成你想要的HTML。我認爲這是一個非常困難的方式去做你想做的事,但它會工作。

public void ProcessRequest(System.Web.HttpContext context) 
     { 
      context.Response.Clear(); 
      context.Response.ContentType = "text/plain"; 

      //Instead of making a new DataGrid from scratch, you could also load an in-memory 
      //instance of a page with the DataGrid on it. You'd then have to get the DataGrid from that page. 
      DataGrid dg = new DataGrid(); 

      //Set up your columns based on the form values here. 
      //Instead of a DataTable, you could use any IEnumerable data source. 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("TestCol"); 

      DataRow dr = dt.NewRow(); 
      dr["TestCol"] = context.Request.Form["myData"].ToString(); 
      dt.Rows.Add(dr); 

      dg.DataSource = dt; 
      dg.DataBind(); 

      //Create an in-memory target Page, then add your DataGrid to it. 
      System.Web.UI.Page p = new System.Web.UI.Page(); 
      p.Controls.Add(dg); 

      //Create a StringWriter that will contain the HTML. 
      //Execute the page, and voila, you got your rendered DataGrid. 
      StringWriter writer = new StringWriter(); 
      context.Server.Execute(p, writer, false); 

      context.Response.Write(writer.ToString()); 
      context.Response.End(); 

     } 
+0

Baw,非常接近。不幸的是,DataGrid不想改變。爲什麼DataGrid? Whhhyyyyy? – SiSan