問題が発生しました: GridView の列のステータス テキストを定期的に更新します。すぐにアイデアが思い浮かびました。GridView は最終的にテーブルを生成するので、ページ上の Ajax を介してテーブルの列を更新し、Ajax による GridView 更新の効果を実現します。
詳細な実装:
更新するデータを保存する XML ファイルを準備し、ページ内でタイマーを開始し、5 秒ごとに関数を呼び出します。関数は $.ajax を使用して XML 内のデータを取得し、XML を解析して走査します。更新対象のデータに一致する行が更新されます。
getuserlist.xml
UserList のルート ノードを定義します。以下の各 UserItem は主キーとして認識され、UStatus は最新のステータスとなります。
<?xml version="1.0" encoding="utf-8" ?> <UserList> <UserItem><UID>1</UID><UStatus>关闭</UStatus></UserItem> <UserItem><UID>2</UID><UStatus>关闭</UStatus></UserItem> <UserItem><UID>3</UID><UStatus>开放</UStatus></UserItem> </UserList>
test.html
具体的なロジックはここに書かれています。
<html> <head> <title>Ajax Update Table Column</title> <script src="jquery-1.3.1.min.js" type="text/javascript"></script> <script type="text/javascript"> window.onload=function(){ //每隔5秒检查一下数据 window.setInterval(checkStatus,5000); }; //检查数据 function checkStatus(){ //ajax请求数据 $.ajax({ //换成你的文件,构造xml格式的数据就行了 url: 'getuserlist.xml', //请求类型 type: 'GET', //数据格式 dataType: 'xml', //超时时间:1秒 timeout: 2000, //加载数据发生错误 error:function (XMLHttpRequest, textStatus, errorThrown) { alert("XMLHttpRequest="+XMLHttpRequest.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown); }, //成功加载数据 success: function(xml){ //遍历表格的行,需要给表格定义一个ID $("#userListTable tr").each(function(){ //获取行的第一列,这里边保存了XML中对应的UID信息 var trID=$(this).find("td").eq(0).text(); //数据的新状态 var trStatus=""; //遍历xml中的UserItem $(xml).find("UserList > UserItem").each(function(){ //获取UID和UStatus的值 var uid = $(this).find("UID").text(); var ustatus = $(this).find("UStatus").text(); //比对当前行的ID和UID,如果相等,给数据的新状态赋值 if(trID==uid){ trStatus=ustatus; } }); //如果数据的新状态不为空,则更新单元格中现实的文本 if(trStatus!=""){ $(this).find("td").eq(2).text(trStatus); } }); } }); } </script> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <!-- 这个表格有三列 ID:数据的ID,相当于主键,用于从xml中查询新数据 Name:只是显示 Status:要更新的列 --> <table border="1" id="userListTable"> <tr><th>ID</th><th>Name</th><th>Status</th></tr> <tr><td>1</td><td>张三</td><td>开放</td></tr> <tr><td>2</td><td>李四</td><td>开放</td></tr> <tr><td>3</td><td>王五</td><td>开放</td></tr> </table> </body> </html>
最後に、必要なファイルを閲覧可能なサイトに配置し、test.html を開きます。
5秒ほど待つと効果が現れます。
IEの問題により、フォルダー内で直接開くとxmlファイルが解析できない問題(parsererror)が発生するため、実行可能なサイト配下に置くか、開くことをお勧めします別のブラウザで。
追記: GridView は DataGrid の後継コントロールです。フレームワーク 2 では、DataGrid はまだ存在しますが、GridView は歴史の最前線にあり、DataGrid を置き換える傾向は止められません。 GridView と DataGrid には、どちらもデータ ソースからのデータを Web ページに表示し、データ ソース内のデータの行、つまりレコードを Web ページ上の出力テーブルの行として表示します。
GridView は DataGrid と比較して以下のような利点があり、スマート タグ パネル (スマート タグの表示) を提供するため、並べ替え、ページング、更新などのよく使用される操作がより簡単で便利です。 、削除はゼロコードで実装できます。 PagerTemplate 属性を使用すると、ユーザー ナビゲーション ページをカスタマイズできます。つまり、ページングの制御がより自由になります。 GridView と DataGrid には、イベント モデルにも多くの違いがあります。DataGrid コントロールは 1 つのイベントをトリガーしますが、GridView コントロールは操作の前に 1 つ、操作後に 1 つずつイベントをトリガーします。 、操作後のイベントは、Sorting イベントとsorted イベント、RowDeleting と RowDeleted イベントなどの複数の ***ed イベントです。
Listview と Gridview のインターフェイスを更新するには、adapter.notifyDataSetChanged() を呼び出してインターフェイスを更新します。
ただし、この方法には欠点があります。データが変更されたかどうかに関係なく、インターフェイス内のすべてのデータが更新されます。