C# ASP.NET GridView中的自定义ITemplate

C# ASP.NET GridView中的自定义ITemplate,c#,asp.net,gridview,itemplate,C#,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 = (Labe

所以

我有一个自定义下拉列表:

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”触发了未处理的事件行编辑”

如何避免此错误并编辑数据


谢谢。

解决方案1:

使
AutoGenerateEditButton=false

解决方案2:

如果要使用“自动编辑”按钮,请处理以下事件:

在aspx页面的网格中:

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

您是否在网格中使用AutoGenerateEditButton=“True”?如果是,则将其设置为false,就像AutoGenerateEditButton=“false”一样。是的,在那里是“True”,但是。。。我应该使用自己的编码编辑按钮吗?我喜欢自动编辑按钮。如果您正在使用自动编辑,请处理它的事件。否则,请将其设为false。对不起,我应该在行编辑代码中放置什么?编辑记录的代码。如果没有,那就空着吧。谢谢,我会的。
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 
}