public class DataGridTemplate : ITemplate
{
ListItemType templateType;
string columnName;
   
public DataGridTemplate(ListItemType type, string colname)
{
templateType = type;
columnName = colname;

}
public void InstantiateIn(System.Web.UI.Control container)
{
Button yd=new Button();
switch(templateType)
{
                              ...
case ListItemType.Item:
yd.Text = columnName;
yd.CommandName="btnclick";
container.Controls.Add(yd);
break;
                            }
......

解决方案 »

  1.   

    你是要给按钮加单击事件吗 如果是可以先选中datagrid,然后在属性窗口单击事件按钮(就是闪电符号)
    在那里面就可以找到你要添加的事件了.
      

  2.   

    写事件代码在DataGrid的ItemCommand中写
      

  3.   

    用datagrid中的ButtonColumn类来实现
      

  4.   

    在DataGrid中使用Button、ImageButton控件时,必须将数据绑定放到
    if(!IsPostBack){
    //
    }
    中,否则无法触发DataGrid的ItemCommand事件.如果使用LinkButton则无此限制。
      

  5.   

    ButtonColumn AddColumn = new ButtonColumn();
    AddColumn.HeaderText="设定按钮列"; 
    AddColumn.Text="设定按钮列";
    AddColumn.CommandName="buttoncl";
    DataGrid1.Columns.Add(AddColumn);
    然后在DataGrid1_ItemCommand()中
    if(e.CommandName=="buttoncl")
    {
    this.page.reg..("a","<script>alert('Button列按钮被点击!')</script>");
    }这个动作没有反应呀!!
      

  6.   

    你添加的事件错误吧,试试ButtonColumn事件
      

  7.   

    你添加的事件错误吧,试试ButtonColumn事件
    在哪里加呀?DataGrid的闪电符点开后,哪有这个事件呀?
      

  8.   

    DataGrid的ItemCommand事件中对相应的控件加事件委托.可以通过参数e的帮助e.Item.Cells[?].Controls[?]..........你自己创建的东西,索引自己总该知道吧?
      

  9.   

    我把代码全贴出来了,请大侠指点点呀!动态生成的按钮列不起作用的问题
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    namespace nss
    {
    /// <summary>
    /// AmusementBook 的摘要说明。
    /// </summary>

    public class aa:System.Web.UI.Page

    protected System.Web.UI.WebControls.Button Button1;
    protected System.Web.UI.WebControls.TextBox TextBox1;
    protected System.Web.UI.WebControls.Button Button2;

    protected System.Web.UI.WebControls.DataGrid DataGrid1;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
                            if(!IsPostBack)
    {

    binddata();



    } private void binddata()
    {
    string bnoselect=" select distinct val1,val2,val3 from table2";
    ..

                   
    ..

    BoundColumn bz=new BoundColumn();
    bz.HeaderText="备注";
    DataGrid1.Columns.Add(bz);

    //button列
    ButtonColumn AddColumn = new ButtonColumn();
    AddColumn.HeaderText="设定按钮列"; 
    AddColumn.Text="设定按钮列";

    AddColumn.CommandName="Select";

    DataGrid1.Columns.Add(AddColumn);
    DataGrid1.DataSource=DataSet1.Tables[0];
    DataGrid1.DataBind();
    DataGrid1.Columns[0].Visible=false;
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
    this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {

    if(e.CommandName=="Select")
    {
    TextBox1.Text="abc";
    }
    } private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    TextBox1.Text="abc";
    }

    }
    }
      

  10.   

    不好意思,打字打快,说错了,是ItemDataBound不是ItemCommand.抱歉
      

  11.   

    private void DgComplain_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    if (e.CommandName=="Pass")
    {
    Response.Write(e.Item.Cells[0].Text);
    }
    }
      

  12.   

    aspx里
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:LinkButton CommandName="Pass" id="lnk_Pass" runat="server">阅过</asp:LinkButton>
    </ItemTemplate>
    </asp:TemplateColumn>
    aspx.cs
    private void DgComplain_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    if (e.CommandName=="Pass")
    {
    Response.Write(e.Item.Cells[0].Text);
    }
    }
      

  13.   

    我求的是在.cs中如何去构造,而不是事先在DataGrid中去静态的生成好一个模板列!!
    再求教
      

  14.   

    你用的方法可以觸發DataGrid1_ItemCommand事件哪。我測試是成功的。
      

  15.   

    我知道啦,在html编辑页面中加这个按钮的onclick事件,然后在后台定义响应函数<asp:DataGrid id="DataGrid1" runat="server" Width="680px" BorderColor="#DEDFDE" BorderStyle="None"
    BorderWidth="1px" BackColor="White" CellPadding="4" GridLines="Vertical" ForeColor="Black"
    ShowFooter="True">
    <FooterStyle BackColor="#CCCC99"></FooterStyle>
    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#CE5D5A"></SelectedItemStyle>
    <AlternatingItemStyle BackColor="White"></AlternatingItemStyle>
    <ItemStyle BackColor="#F7F7DE"></ItemStyle>
    <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#6B696B"></HeaderStyle>
    <Columns>
    <asp:TemplateColumn HeaderText="选择">
    <HeaderStyle Width="40px"></HeaderStyle>
    <ItemTemplate>
    <asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
    </ItemTemplate>
    <FooterTemplate>
    <asp:CheckBox id="CheckBox2" runat="server" Text="全选" OnCheckedChanged="Select_all"//请注意这里,定义的相应函数名 AutoPostBack="True"></asp:CheckBox>
    </FooterTemplate>
    </asp:TemplateColumn>
    </Columns>
    <PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#F7F7DE" Mode="NumericPages"></PagerStyle>
    </asp:DataGrid>
    public void Select_all(object sender, System.EventArgs e)//这里是相应函数
    {
    if((sender as CheckBox).Checked)
    {
    System.Web.UI.WebControls.CheckBox c=new CheckBox();
    for(int i=0;i<dt.Rows.Count;i++)
    {
    System.Web.UI.WebControls.CheckBox ch=(Function.Child(this.DataGrid1.Items[i].Cells[0].Controls,c) as CheckBox);
    if(!ch.Checked)
    {
    ch.Checked=true;
    }
    }
    }
    else
    {
    System.Web.UI.WebControls.CheckBox c=new CheckBox();
    for(int i=0;i<dt.Rows.Count;i++)
    {
    System.Web.UI.WebControls.CheckBox ch=(Function.Child(this.DataGrid1.Items[i].Cells[0].Controls,c) as CheckBox);
    if(ch.Checked)
    {
    ch.Checked=false;
    }
    }
    }
    }