动态增删改的gridview,注脚是插入,然后又修改、更新、取消、删除在操作列中
gridview列中有一个img,点击出发弹窗事件,点击修改的时候 如下面的后台代码,onclick可以触发
但是gridview的注脚中的img点击以后无法触发事件。请教怎么给gridview注脚中控件添加onclick事件啊
前台<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id"
  OnRowDataBound="GridView1_RowDataBound" ShowFooter="true" Width="100%" 
                     ondatabound="GridView1_DataBound" >
  <HeaderStyle BackColor="#507CD1" Font-Bold="true" />
  <Columns>
    <asp:TemplateField HeaderText="负责人员">
  <ItemTemplate>
  <asp:PlaceHolder ID="LabelRealname" runat="server">
  <%#Eval("Realname")%></asp:PlaceHolder>
  <asp:TextBox ID="username" runat="server" Style="display: none" Visible="false"></asp:TextBox>
  <asp:TextBox ID="Realname" runat="server" Width="70%" Visible="false"></asp:TextBox><a href="javascript:void(0)"><img id="img1" runat="server" alt="" src="../images/FDJ.gif" border="0" Visible="false"/></a>
  </ItemTemplate>
  <ItemStyle Width="200" BorderColor="#507CD1" BorderWidth="1px"  Height="23px"/> 
  <FooterTemplate>
  <asp:TextBox ID="Newusername" runat="server" Style="display: none"></asp:TextBox>
  <asp:TextBox ID="NewRealname" runat="server" Width="70%"></asp:TextBox><a href="javascript:void(0)" ><img id="Newimg1" runat="server" alt="" src="../images/FDJ.gif" border="0" /></a>
  </FooterTemplate>
  </asp:TemplateField>
  <asp:TemplateField HeaderText="任务备注">
  <ItemTemplate>
  <asp:PlaceHolder ID="Labelbeizhu" runat="server">
  <%#Eval("beizhu")%></asp:PlaceHolder>
  <asp:TextBox ID="beizhu" Width="100%" runat="server" Visible="false"></asp:TextBox>
  </ItemTemplate>
  <ItemStyle Width="400" BorderColor="#507CD1" BorderWidth="1px"  Height="23px"/> 
  <FooterTemplate>
  <asp:TextBox ID="Newbeizhu" runat="server" Width="98%"></asp:TextBox>
  </FooterTemplate>
  </asp:TemplateField>
  <asp:TemplateField HeaderText="操作">
  <ItemTemplate>
  <asp:Panel ID="PanelNormal" runat="server">
  <asp:Button ID="EditButton" runat="server" Text="修改" OnClick="EditClick1" CommandArgument='<%#Eval("id") %>' />
  <asp:Button ID="DeleteButton" runat="server" Text="删除" OnClick="DeleteClick1" CommandArgument='<%#Eval("id") %>' />
  </asp:Panel>
  <asp:Panel ID="PanelUpdate" runat="server" Visible="false">
  <asp:Button ID="UpdateButton" runat="server" Text="更新" OnClick="UpdateClick1" CommandArgument='<%#Eval("id") %>' />
  <asp:Button ID="CancelButton" runat="server" Text="取消" OnClick="CancelClick1" />
  </asp:Panel>
  </ItemTemplate>
  <FooterTemplate>
  <asp:Button ID="AddButton" runat="server" Text="添加新纪录" OnClick="AddClick1" />
  </FooterTemplate>
  </asp:TemplateField>
  </Columns>
   <RowStyle BackColor="#BBFFFF" ForeColor="Black" />
                                                        <SelectedRowStyle BackColor="#BBFFFF" Font-Bold="True" ForeColor="White" />
                                                        <PagerStyle BackColor="#BBFFFF" ForeColor="Black" HorizontalAlign="Right" />
                                                        <HeaderStyle BackColor="#BBFFFF" Font-Bold="True" ForeColor="#000000" Wrap="False" />
                                                        <AlternatingRowStyle BackColor="#BBFFFF" />
  <EmptyDataTemplate>
  <table cellspacing="0" rules="all" border="1" style="border-collapse: collapse;">
  <tr>
  <th>材料名称</th>
  <th>负责人员</th>
  <th>时间要求</th>
  <th>任务备注</th>
  <th>操作</th>
  </tr>
  <tr>
  <td>
  <asp:DropDownList runat="server" ID="NewmettingSX" DataSourceID="SqlDataSource2" DataTextField="mettingSX" DataValueField="mettingSX" Width="200">
                                                                        <asp:ListItem Value="——请选择——">——请选择——</asp:ListItem>
                                                                    </asp:DropDownList>
                                                                    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:qpoaConnectionString7 %>"
                                                                        SelectCommand="SELECT [mettingSX] FROM [mettingAP] where [class]='材料准备'"></asp:SqlDataSource>
  </td>
  <td>
  <asp:TextBox ID="Newusername" runat="server" Style="display: none"></asp:TextBox>
  <asp:TextBox ID="NewRealname" runat="server" Width="70%"></asp:TextBox><a href="javascript:void(0)" ><img id="Newimg1" runat="server" alt="" src="../images/FDJ.gif" border="0" /></a>
  </td>
  <td>
  <asp:TextBox ID="Newendtime" Width="200" runat="server" Text='<%# DataBinder.Eval(Container,"DataItem.endtime") %>' onclick="setDayHM(this);" ></asp:TextBox>
    </td>
    <td>
 <asp:TextBox ID="Newbeizhu" runat="server" Width="400"></asp:TextBox>
    </td>
  <td>
  <asp:Button ID="b" runat="server" Text="添加新纪录" OnClick="AddClick1" />
  </td>
  </tr>
  </table>
  </EmptyDataTemplate>
 </asp:GridView>
后台rowboundprotected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                
                if (EditId > 0)
                {
                    //如果绑定数据源是DatarReader,则使用下面的方法:
                    //System.Data.Common.DbDataRecord rowItem = (System.Data.Common.DbDataRecord)e.Row.DataItem;
                    //如果绑定是 DataView,则使用此方法
                    System.Data.DataRowView rowItem = (System.Data.DataRowView)e.Row.DataItem;
                    if (rowItem["id"].ToString().Equals(EditId.ToString()))
                    {
                        //隐藏显示的文字
                        PlaceHolder LabelmettingSX = e.Row.FindControl("LabelmettingSX") as PlaceHolder;
                        LabelmettingSX.Visible = false;
                        PlaceHolder LabelRealname = e.Row.FindControl("LabelRealname") as PlaceHolder;
                        LabelRealname.Visible = false;
                        PlaceHolder Labelendtime = e.Row.FindControl("Labelendtime") as PlaceHolder;
                        Labelendtime.Visible = false;
                        PlaceHolder Labelbeizhu = e.Row.FindControl("Labelbeizhu") as PlaceHolder;
                        Labelbeizhu.Visible = false;                        //打开编辑框
                        DropDownList mettingSX = e.Row.FindControl("mettingSX") as DropDownList;
                        mettingSX.Visible = true;
                        TextBox Realname = e.Row.FindControl("Realname") as TextBox;
                        Realname.Visible = true;
                        TextBox username = e.Row.FindControl("username") as TextBox;
                        username.Visible = true;
                        HtmlImage img1 = e.Row.FindControl("img1") as HtmlImage;
                        img1.Visible = true;
                        img1.Attributes.Add("onclick", "openuser1('" + Realname.ClientID + "','" + username.ClientID + "')");
                        TextBox endtime = e.Row.FindControl("endtime") as TextBox;
                        endtime.Visible = true;
                        TextBox beizhu = e.Row.FindControl("beizhu") as TextBox;
                        beizhu.Visible = true;
                        //赋原来的值                        //显示编辑更新按钮
                        Panel PanelNormal = e.Row.FindControl("PanelNormal") as Panel;
                        PanelNormal.Visible = false;
                        Panel PanelUpdate = e.Row.FindControl("PanelUpdate") as Panel;
                        PanelUpdate.Visible = true;
                    }
                }
            }
            
        }

解决方案 »

  1.   


        /// <summary>
        /// 行绑定
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvdata_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                LinkButton lblDelete = e.Row.FindControl("lbDel") as LinkButton;//找到该控件,lbDel为模板列控件ID            lblDelete.Attributes.Add("onclick", "ChkAmountselpA();");//添加onclick事件,ChkAmountselpA()为js方法
            }
        }是不是这个思路?
      

  2.   

    大概看了下你的代码,你给img1注册了onclick事件 ,但是前台没有实现openuser1函数,点击当然没反应
    img1.Attributes.Add("onclick", "openuser1('" + Realname.ClientID + "','" + username
      

  3.   

    我前台是有 openuser1的 var  wName_1;  
    function  openuser1(txtID,txtuer)  
    {  
    var num=Math.random();
    var str=""+document.getElementById(txtuer).value+"|"+document.getElementById(txtID).value+"";
    wName_1=window.showModalDialog("../OpenWindows/open_Username_two.aspx?tmp="+num+"&requeststr="+str+"","window", "dialogWidth:650px;DialogHeight=580px;status:no;scroll=yes;help:no");                
    var arr = wName_1.split("|");
    for(var i=0;i<arr.length;i++)

    document.getElementById(txtuer).value=arr[0]; 
    document.getElementById(txtID).value=arr[1]; 
    document.getElementById("Username").value=arr[0]; 
      

  4.   

    先把function openuser1(txtID,txtuer){
    alert(000);
    }
    换成这样看有反应吗
      

  5.   

    没反应 因为我的img是在注脚中的 所以
    protected void GridView1_DataBound(object sender, EventArgs e)
            {
                TextBox t = GridView1.FooterRow.FindControl("NewRealname") as TextBox;
                TextBox u = GridView1.FooterRow.FindControl("Newusername") as TextBox;
                HtmlImage x = GridView1.FooterRow.FindControl("Newimg1") as HtmlImage;
                            x.Attributes.Add("onclick", "openuser1('" + t.ClientID + "','" + u.ClientID + "')");
            }这样可以触发事件 但问题是 如果数据库中没有数据 就报错 我写在databound中能触发,前提是必须数据库有数据并且读取出来了 才可以 否则报未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
    行 263:        protected void GridView1_DataBound(object sender, EventArgs e)
    行 264:        {
    行 265:            TextBox t = GridView1.FooterRow.FindControl("NewRealname") as TextBox;
    行 266:            TextBox u = GridView1.FooterRow.FindControl("Newusername") as TextBox;
    行 267:            HtmlImage x = GridView1.FooterRow.FindControl("Newimg1") as HtmlImage;
     
      

  6.   

    <EmptyDataTemplate>
      <table cellspacing="0" rules="all" border="1" style="border-collapse: collapse;">
      <tr>
      <th>安排事项</th>
      <th>负责人员</th>
      <th>时间要求</th>
      <th>任务备注</th>
      <th>操作</th>
      </tr>
      <tr>
      <td>
      <asp:DropDownList runat="server" ID="NewmettingSX" DataSourceID="SqlDataSource2" DataTextField="mettingSX" DataValueField="mettingSX" Width="200">
                                                                            <asp:ListItem Value="——请选择——">——请选择——</asp:ListItem>
                                                                        </asp:DropDownList>
                                                                        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:qpoaConnectionString7 %>"
                                                                            SelectCommand="SELECT [mettingSX] FROM [mettingAP] where [class]='其他安排'"></asp:SqlDataSource>
      </td>
      <td>
      <asp:TextBox ID="Newusername" runat="server" Style="display: none"></asp:TextBox>
      <asp:TextBox ID="NewRealname" runat="server" Width="70%"></asp:TextBox><a href="javascript:void(0)" ><img id="Newimg1" runat="server" alt="" src="../images/FDJ.gif" border="0" /></a>
      </td>
      <td>
      <asp:TextBox ID="Newendtime" Width="200" runat="server" Text='<%# DataBinder.Eval(Container,"DataItem.endtime") %>' onclick="setDayHM(this);" ></asp:TextBox>
        </td>
        <td>
     <asp:TextBox ID="Newbeizhu" runat="server" Width="400"></asp:TextBox>
        </td>
      <td>
      <asp:Button ID="b" runat="server" Text="添加新纪录" OnClick="AddClick4" />
      </td>
      </tr>
      </table>
      </EmptyDataTemplate>这里面的img的onclick事件无法触发