2010-07-05 37 views
1

是否有可能將焦點放回到gridview行之後,該行的選擇生成回發?在回發後將焦點放回gridview的選定行

我想在gridview行上添加一個onkeydown處理程序,以便使用鍵盤進行導航。我相信,我的問題是,在第一次回發之後,所選單元格失去焦點,所以下一個關鍵筆劃不會被單元格捕獲。

我有以下代碼

網格視圖

<asp:GridView runat="server" ID="gdvPersons" AutoGenerateColumns="false" 
     onrowcreated="gdvPersons_RowCreated" onselectedindexchanged="gdvPersons_SelectedIndexChanged"> 
     <Columns> 
      <asp:TemplateField HeaderText="Name"> 
       <ItemTemplate> 
        <%# ((GridviewFocus.Person) Container.DataItem).Name %> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Age"> 
       <ItemTemplate> 
        <%# ((GridviewFocus.Person) Container.DataItem).Age %> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

後面的代碼

protected void Page_Load(object sender, EventArgs e) 
    { 
     var persons = new List<Person> {new Person() {Name = "Fikre", Age = 24}, 
             new Person() {Name = "Mike", Age = 29}, 
             new Person() {Name = "Mark", Age = 35}}; 
     gdvPersons.DataSource = persons; 
     gdvPersons.DataBind(); 
    } 

    protected void gdvPersons_RowCreated(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
      e.Row.Attributes.Add("onkeydown", ClientScript.GetPostBackEventReference((Control)sender, "Select$" + e.Row.DataItemIndex)); 
    } 

    protected void gdvPersons_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     gdvPersons.SelectedRow.Focus(); 
    } 

回答

0

在您的onkeydown腳本代碼的小區的ID複製到一個隱藏的輸入字段。

<input type="text" id="gridviewcell_id" onkeydown="lastcell.value = this.id" /> 
<input type="hidden" id="lastcell" runat="server" /> 

上面的例子是純html,你將不得不添加適當的onkeydown代碼到你的gridview。

在您的回發(例如onclick)事件處理程序代碼中,您可以從隱藏字段value屬性中檢索id,並在刷新頁面時註冊javascript以執行。如果你有一個按鈕被點擊執行回發,你可以做這樣的事情:

protected void MyButton_Click(object sender, EventArgs e) 
{ 
    string id = lastcell.Value; 
    string script = "var ctrl = document.getElementById('" + lastcell.Value + "');"; 
    script += "ctrl.focus();"; 
    ClientScript.RegisterClientScriptBlock(this.GetType(), 
     "focusScript", script, true); 

} 

這應該讓你的頁面執行下面的腳本,一旦它的加載和控制應retrive重點:

var ctrl = document.getElementById("yourid"); 
ctrl.focus(); 
+0

我有一個去你的解決方案,但即時通訊視圖的行ID'麻煩。我將我的原始代碼包含到問題 – Fikre 2010-07-05 20:24:33

+0

您發佈的代碼中沒有編輯字段。那麼你打算怎麼做導航?您能否提供更完整的示例,並且使用.net3.5還是4.0? – 2010-07-06 06:27:36

+0

即時將onkeydown事件添加到gdvPersons_RowCreated事件中的每一行。 我的代碼的問題是,一個表格行需要一個選項卡索引才能獲得焦點。 我也改變了gdvPersons.SelectedRow.Focus();與您的代碼聚焦行,所以我標記爲答案。謝謝 – Fikre 2010-07-06 20:27:02

相關問題