我用如下类创建DataGrid的一个模板列。
public class CTemplateColumn:ITemplate
{
private string colname; public CTemplateColumn(string cname)
{ colname=cname; } public void InstantiateIn(Control container)       
{ TextBox l=new TextBox();
l.TextMode=TextBoxMode.MultiLine;
l.Height=84;
l.DataBinding += new EventHandler(this.OnDataBinding);
container.Controls.Add(l); } public void OnDataBinding(object sender, EventArgs e)
{
TextBox l=(TextBox) sender;
DataGridItem container = (DataGridItem) l.NamingContainer;
l.Text = ((DataRowView)       container.DataItem)[colname].ToString();
}}调用方式为:
tc1=new TemplateColumn();
tc1.ItemTemplate=new CTemplateColumn("bzout");
tc1.HeaderText="备注2";
DataGrid1.Columns.Add(tc1);
Page.Controls[1].Controls.Add(DataGrid1);然后数据绑定。省略(应该没问题)
在DataGird中添加编辑按钮列。
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
</Columns>
</asp:DataGrid>但是运行是点击编辑后不会触发,DataGrid的EditCommand事件。

解决方案 »

  1.   

    你没有加编辑事件注册代码:
    this.DataGrid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);在DataGrid1_EditCommand里写
    DataGrid1.EditItemIndex=e.Item.ItemIndex;
      

  2.   

    我用.Net2003写的系统已经自动在private void InitializeComponent()中
    添加了
    this.DataGrid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);而且DataGrid1_EditCommand事件根本就不进去,里面写的语句根本就不执行。
      

  3.   

    你的EditCommand事件里是怎么写的?
      

  4.   

    DataGrid1.EditItemIndex=e.Item.ItemIndex;
    然后数据绑定,我设置了断点,debug时根本就不进入断点执行。
      

  5.   

    DataGrid1.EditItemIndex=e.Item.ItemIndex;
    然后数据绑定,我设置了断点,debug时根本就不进入断点执行。
      

  6.   

    DataGrid1.EditItemIndex=e.Item.ItemIndex;
    然后数据绑定,我设置了断点,debug时根本就不进入断点执行。
      

  7.   

    你这样试试:
    <asp:TemplateColumn HeaderText="操作">
    <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle"></HeaderStyle>
    <ItemTemplate>
    <asp:LinkButton Text="浏览" CommandName="edit" ForeColor="blue" runat="server" ID="Linkbutton2" />

    </ItemTemplate>
    </asp:TemplateColumn>
    然后直接在private void MyDataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)中写代码试试看
      

  8.   

    我在没有加这个动态模板列的时候是可以进入DataGrid1_EditCommand事件的,但是添加了这个动态模板列后就不行了。应该是public class CTemplateColumn:ITemplate有问题,但是小弟不知如何修改。
      

  9.   

    我在没有加这个动态模板列的时候是可以进入DataGrid1_EditCommand事件的,但是添加了这个动态模板列后就不行了。应该是public class CTemplateColumn:ITemplate有问题,但是小弟不知如何修改。
      

  10.   

    我在没有加这个动态模板列的时候是可以进入DataGrid1_EditCommand事件的,但是添加了这个动态模板列后就不行了。应该是public class CTemplateColumn:ITemplate有问题,但是小弟不知如何修改。
      

  11.   

    你参考一下这篇文章吧--Adding a CheckBox column to your DataGrid:
    http://www.codeproject.com/aspnet/DataGridCheckBox.asp
      

  12.   

    tc1=new TemplateColumn();
    tc1.ItemTemplate=new CTemplateColumn("bzout");
    tc1.HeaderText="备注2";
    DataGrid1.Columns.Add(tc1);你只定义了 tc1.ItemTemplate 没定义 tc1.EditItemTemplate!