C# 在asp.net中从客户端(Javascript)刷新GridView

C# 在asp.net中从客户端(Javascript)刷新GridView,c#,javascript,asp.net,gridview,C#,Javascript,Asp.net,Gridview,我在网页上添加了Gridview控件。 我通过调用PageMethod删除任何行(一次一行),如下所示: <script type="text/javascript"> function Delete_Row(){ PageMethods.DeleteRow(row_id, GetTimeCallback, ErrorHandler, TimeOutHandler); } GetTimeCallback = function

我在网页上添加了Gridview控件。

我通过调用PageMethod删除任何行(一次一行),如下所示:

    <script type="text/javascript">
      function Delete_Row(){
        PageMethods.DeleteRow(row_id, GetTimeCallback, ErrorHandler, TimeOutHandler);
      }
      GetTimeCallback = function (result) 
      {
         if (result) {
            alert('Row is deleted');
            // I want to refresh the Gridview here
          }
      }
    <script type="text/javascript">

函数Delete_Row(){
DeleteRow(row_id,GetTimeCallback,ErrorHandler,TimeOutHandler);
}
GetTimeCallback=函数(结果)
{
如果(结果){
警报(“行已删除”);
//我想在这里刷新Gridview
}
}
其中“行\u id”是该行的主键

它完美地显示了警报,但不会用少删除的一行刷新Gridview。
我应该编写什么代码来更新gridview

注意:我不想刷新整个页面。

编写回调函数以实现此目的……您可以在和找到回调功能

编辑:-

   protected void Page_Load(object sender, EventArgs e)
   {
    String cbReference =Page.ClientScript.GetCallbackEventReference(this,
        "arg", "ReceiveServerData", "context");
    String callbackScript;
    callbackScript = "function CallServer(arg, context)" +
        "{ " + cbReference + ";}";
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
        "CallServer", callbackScript, true);

   }


 System.IO.StringWriter strDataGridHtml= new System.IO.StringWriter(); 

 public void RaiseCallbackEvent(String eventArgument)
    {
         string idToBeDeleted=eventArgument;
         //Write deleteCode
         //DataBind the Grid
         HtmlTextWriter htwObject = new HtmlTextWriter(strDataGridHtml);
         GridViewControl.RenderControl(htwObject);
    }        

public String GetCallbackResult()
    {
        return strDataGridHtml.ToString();
    }
现在,正如您看到的,strDataGridHtml将被发送到Javascript函数ReceiveServerData

<script type="text/ecmascript">

    function ReceiveServerData(rValue)
    {   
        document.getElementById("divIDWhichEncapsulategridView").innerHTML = rValue;

    }
  </script>

函数ReceiveServerData(右值)
{   
document.getElementById(“divIDWhichEncapsulategridView”).innerHTML=rValue;
}

希望这能对你有所帮助。因为我没有你的完整代码,我无法写出准确的代码…但这应该会让你对如何继续有一些想法…也请通过“回调”功能为了最充分地理解此功能。

编写回调函数。实现此功能。…您可以在和找到回调功能

编辑:-

   protected void Page_Load(object sender, EventArgs e)
   {
    String cbReference =Page.ClientScript.GetCallbackEventReference(this,
        "arg", "ReceiveServerData", "context");
    String callbackScript;
    callbackScript = "function CallServer(arg, context)" +
        "{ " + cbReference + ";}";
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
        "CallServer", callbackScript, true);

   }


 System.IO.StringWriter strDataGridHtml= new System.IO.StringWriter(); 

 public void RaiseCallbackEvent(String eventArgument)
    {
         string idToBeDeleted=eventArgument;
         //Write deleteCode
         //DataBind the Grid
         HtmlTextWriter htwObject = new HtmlTextWriter(strDataGridHtml);
         GridViewControl.RenderControl(htwObject);
    }        

public String GetCallbackResult()
    {
        return strDataGridHtml.ToString();
    }
现在,正如您看到的,strDataGridHtml将被发送到Javascript函数ReceiveServerData

<script type="text/ecmascript">

    function ReceiveServerData(rValue)
    {   
        document.getElementById("divIDWhichEncapsulategridView").innerHTML = rValue;

    }
  </script>

函数ReceiveServerData(右值)
{   
document.getElementById(“divIDWhichEncapsulategridView”).innerHTML=rValue;
}

希望这能对您有所帮助..因为我没有您的完整代码,所以我无法编写准确的代码..但这会让您了解如何继续…同时,请仔细阅读“回调”功能,以便最充分地理解此功能..

谢谢Amol。它正在调用服务器端方法“RaiseCallbackEvent”,但没有重新设计Gridview。我使用了GridView1.DataSource=SqlDataSource1;GridView1.DataSourceID=String.Empty;GridView1.DataBind();此代码在该服务器端方法中运行,但不起作用。还有其他想法吗?您必须做的是..绑定后使用HTMLTextWriter呈现gridView控件并将其传递给Javascript函数…在Javascript函数中,您需要将此文本作为InnerHTML分配给包含gridView的Div…System.IO.StringWriter sWriter=new System.IO.StringWriter();HtmlTextWriter htwObject=新的HtmlTextWriter(sWriter);RenderControl(htwObject);这是如何在HTMLTextWriter中呈现gridview的。然后将其传递给JavascriptI。我对该功能完全陌生。请在您的ans中添加此代码,这样我才能更好地理解…提前感谢。感谢Amol显示此代码。但它似乎不起作用。虽然它删除了行,但它生成的HTML代码不包含我们在数据库中所做的更改,因此DIV(ID为“divIDWhichEncapsulategridView”)仅显示上一个表。谢谢Amol。它正在调用服务器端方法“RaiseCallbackEvent”,但没有重新设计Gridview。我使用了GridView1.DataSource=SqlDataSource1;GridView1.DataSourceID=String.Empty;GridView1.DataBind();此代码在该服务器端方法中运行,但不起作用。还有其他想法吗?您必须做的是..绑定后使用HTMLTextWriter呈现gridView控件并将其传递给Javascript函数…在Javascript函数中,您需要将此文本作为InnerHTML分配给包含gridView的Div…System.IO.StringWriter sWriter=new System.IO.StringWriter();HtmlTextWriter htwObject=新的HtmlTextWriter(sWriter);RenderControl(htwObject);这是如何在HTMLTextWriter中呈现gridview的。然后将其传递给JavascriptI。我对该功能完全陌生。请在您的ans中添加此代码,这样我才能更好地理解…提前感谢。感谢Amol显示此代码。但它似乎不起作用。虽然它删除了行,但它生成的HTML代码不包含我们在数据库中所做的更改,因此DIV(ID为“divIDWhichEncapsulategridView”)仅显示上一个表。