2012-08-07 93 views
1

我目前有一個通過c#方法通過數據庫填充的gridview。突出顯示和編輯網格

我想知道是否有辦法在行上任何地方單擊時選擇行,而不是完全使用選擇按鈕。然後將該行的信息發回並填充網頁上的其他區域。

有沒有比gridview更好的網格呢?我應該外包給jQuery嗎?或者是我應該需要的所有gridview?

回答

1

你需要做的是開發一個可點擊行的GridView。最好的選擇是遵循鏈接中的指示。如果你使用VB,你可以沿着這條路線前進。用戶也將其轉換爲C#,它在評論部分。如果包括它,你就不會看到它。

繼承人的鏈接我已經保存:http://aspadvice.com/blogs/joteke/archive/2006/01/07/14576.aspx

using System; 
using System.ComponentModel; 
using System.Configuration; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace CustomGridView 
{ 
/// <summary> 
/// Summary description for ClickableGridView 
/// </summary> 
public class ClickableGridView : GridView 
{ 
    public string RowCssClass 
    { 
    get 
    { 
     string rowClass = (string)ViewState["rowClass"]; 
     if (!string.IsNullOrEmpty(rowClass)) 
     return rowClass; 
     else 
     return string.Empty; 
    } 
    set 
    { 
     ViewState["rowClass"] = value; 
    } 
    } 

    public string HoverRowCssClass 
    { 
    get 
    { 
     string hoverRowClass = (string)ViewState["hoverRowClass"]; 
     if (!string.IsNullOrEmpty(hoverRowClass)) 
     return hoverRowClass; 
     else 
     return string.Empty; 
    } 
    set 
    { 
     ViewState["hoverRowClass"] = value; 
    } 
    } 

    private static readonly object RowClickedEventKey = new object(); 

    public event GridViewRowClicked RowClicked; 
    protected virtual void OnRowClicked(GridViewRowClickedEventArgs e) 
    { 
    if (RowClicked != null) 
     RowClicked(this, e); 
    } 

    protected override void RaisePostBackEvent(string eventArgument) 
    { 
    if (eventArgument.StartsWith("rc")) 
    { 
     int index = Int32.Parse(eventArgument.Substring(2)); 
     GridViewRowClickedEventArgs args = new GridViewRowClickedEventArgs(Rows[index]); 
     OnRowClicked(args); 
    } 
    else 
     base.RaisePostBackEvent(eventArgument); 
    } 

    protected override void PrepareControlHierarchy() 
    { 
    base.PrepareControlHierarchy(); 

    for (int i = 0; i < Rows.Count; i++) 
    { 
     string argsData = "rc" + Rows[i].RowIndex.ToString(); 
     Rows[i].Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(this, argsData)); 

     if (RowCssClass != string.Empty) 
     Rows[i].Attributes.Add("onmouseout", "this.className='" + RowCssClass + "';"); 

     if (HoverRowCssClass != string.Empty) 
     Rows[i].Attributes.Add("onmouseover", "this.className='" + HoverRowCssClass + "';"); 
    } 
    } 
} 

public class GridViewRowClickedEventArgs : EventArgs 
{ 
    private GridViewRow _row; 

    public GridViewRowClickedEventArgs(GridViewRow aRow) 
    : base() 
    { 
    _row = aRow; 
    } 

    public GridViewRow Row 
    { 
    get 
    { return _row; } 
    } 
} 

public delegate void GridViewRowClicked(object sender, GridViewRowClickedEventArgs args); 
} 
+0

謝謝您的答覆。我在C#工作,對處理程序的知識非常有限。我需要將主處理程序代碼指向我的網格嗎?如果是這樣,怎麼樣? – user1512593 2012-08-07 23:52:29

相關問題