私の要件は、すべてのポストバックでデータを更新することですが、そうすると、グリッドビューのリンクボタンクリックでrowcommandイベントが発生しませんか?どうすればそれを達成できますか?
jqueryを使用して行の順序を変更し、新しい順序を非表示の変数に保存しています。ページのポストバックで、隠れた変数から新しい順序を取得し、グリッドを新しい順序で再バインドします。
ページのポストバックのたびに、グリッドを新しい順序で再バインドする必要があります。グリッド内の[編集/削除]リンクボタンをクリックするとポストバックが発生しますが、rowcommandイベントが発生しません。
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
string order = hdnOrder.Value.ToString();
if (order != string.Empty)
{
ReOrder();
}
}
}
protected void ReOrder()
{
DataTable dt = new DataTable();
if (ViewState["data"] != null)
{
dt = (DataTable) ViewState["data"];
string[] order = hdnOrder.Value.Split(',');
for (int i = 0; i < order.Length; i++)
{
DataRow[] keyRows;
keyRows = dt.Select("ID='" + order[i] + "'");
if (keyRows.Length > 0)
{
int index = dt.Rows.IndexOf(keyRows[0]);
dt.Rows[index].SetField("Precedence", i + 1);
}
}
DataView dv = dt.DefaultView;
dv.Sort = "Precedence ASC";
ViewState["data"] = dv.ToTable();
grd.DataSource = ViewState["data"];
grd.DataBind();
hdnOrder.Value = string.Empty;
}
}