2014-03-05 39 views
0

所以。在ASP.NET GridView中定製ITemplate

我有一個自定義下拉列表:

public class LabelTemplate : ITemplate 
{ 

    string __field; 

    public LabelTemplate(string _field) 
    { 
     __field = _field; 
    } 

    private void Combo_DataBinding(Object sender, EventArgs e) 
    { 
     Label l = (Label)sender; 
     GridViewRow row = (GridViewRow)l.NamingContainer; 
     l.Text = DataBinder.Eval(row.DataItem, __field).ToString(); 
    } 

    public void InstantiateIn(Control container) 
    { 
     Label _l = new Label(); 
     _l.DataBinding += new EventHandler(this.Combo_DataBinding); 
     container.Controls.Add(_l); 
    } 

} 


public class ListTemplate : ITemplate 
{ 
    public ListTemplate(string _field, string _query, WebLogic _transport) 
    { 
     _vfield = _field; 
     _vquery = _query; 
     _vtransport=_transport; 
    } 


    protected WebLogic _vtransport; 
    protected string _vfield; 
    protected string _vquery; 
    protected DataRow _vrow; 

    private void Combo_DataBinding(Object sender, EventArgs e) 
    { 
     DropDownList l = (DropDownList)sender; 
     GridViewRow row = (GridViewRow)l.NamingContainer; 
     l.SelectedValue = DataBinder.Eval(row.DataItem, "SowingID").ToString(); 
    } 



    public void InstantiateIn(Control container) 
    { 

     DropDownList _l = new DropDownList(); 
     try 
     { 
      DataTable _z = _vtransport.GetList(_vquery); 
      foreach (DataRow _r in _z.Rows) 
      { 
       ListItem _ll = new ListItem(_r[1].ToString(), _r[0].ToString()); 
       _l.Items.Add(_ll); 
      } 
     } 
     catch { 
      _l.Items.Add(new ListItem("Error", Guid.NewGuid().ToString())); 
     } 
     _l.DataBinding += new EventHandler(this.Combo_DataBinding); 


     container.Controls.Add(_l); 
    } 
} 



public partial class edtRegistry : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      TemplateField _fld = new TemplateField(); 
      //Label 
      LabelTemplate _lab = new LabelTemplate("SowingID"); 
      // DropDownList 
      ListTemplate _lal = new ListTemplate(_cc.ColumnName, _reg._vrfqueries [_reg._valuefields.IndexOf(_cc.ColumnName)], Transport); 

      _fld.HeaderText = _cc.ColumnName; 
      _fld.ItemTemplate = _lab; 
      _fld.EditItemTemplate = _lal; 

      GridView1.Columns.Add(_fld); 
     } 
    } 
} 

等。 GridView1自動生成了「編輯」按鈕,所以當我點擊它時,出現錯誤 - 「GridView'GridView1'觸發了未處理的事件RowEditing」。

我怎樣才能避免這個錯誤,只是編輯數據?

謝謝。

+0

是否使用AutoGenerateEditButton屬性= 「真」 在你的網格? –

+0

如果是,則將其設爲false,如AutoGenerateEditButton =「false」。 –

+0

是的,它在那裏是「真的」,但是......我應該使用自己的編碼編輯按鈕,對嗎?我喜歡autoedit按鈕。 –

回答

0

解決方案1:

AutoGenerateEditButton = false

解決方案2:

如果你想使用AUTOEDIT按鈕,然後處理類似的事件:

在aspx頁面,在你的網格:

<asp:GridView ID="GridView1" runat="server" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"> 

並在後面的代碼:

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    //Your code here 
} 

protected void GridView1_RowUpdating(object sender, GridViewEditEventArgs e) 
{ 
    // Write here code for edit Rows 
} 
+0

對不起,我到底該在RowEditing代碼中放置什麼? –

+0

編輯您的記錄的代碼。如果沒有,則將其留空。 –