none
datagrid中的按钮列的如何加载客户端事件? RRS feed

  • 问题

  • vs2003,web,在datagrid中添加了一个按钮列,来编辑行记录。按钮列有,修改,保存,取消。
    点击修改,出现一个文本框和值,然后,点击保存。ok。
    但是,现在我要加验证,在文本框上,只能输入数字,JavaScript方法都写好了,却不知道该如何绑定到这个文本框。在aspx文件根本就没有看到文本框,我在打开的网页,查看源码:显示:<input name="dg_info:_ctl2:_ctl2" type="text" value="24" />
    这个是datagrid生成的文本框吗?那么我怎么绑定到JavaScript方法?

    我自己尝试了一下,没有成功
    TextBox the_txt=((TextBox)e.Item.Cells[2].Controls[0]);
    the_txt.Attributes.Add("onkeyup","chknum(this)");//验证文本框的值
    2010年1月21日 3:21

答案

  • 用模板列 自己定义Button
    Memory all alone in the moonlight~My Blog in .NET~~~
    2010年1月21日 3:42
    版主
  • 将这段代码放到datagrid的数据绑定事件里,DataBound
    2010年1月21日 9:08
  • Raymond Tang版主所言,用模板列就行了。在EditItemplate中用验证控件与其绑定就行了。
    可以参考下面的例子。
    <asp:DataGrid runat="server" ID="dg1" AutoGenerateColumns="False"  
                DataSourceID="SqlDataSource2" oneditcommand="dg1_EditCommand" oncancelcommand="dg1_CancelCommand" 
                onupdatecommand="dg1_UpdateCommand1">
            <Columns>
                <asp:EditCommandColumn CancelText="Cancel" EditText="Edit" UpdateText="Update" 
                    HeaderText="Edit">
                </asp:EditCommandColumn>
                <asp:TemplateColumn HeaderText="ImageName">
                <ItemTemplate>
                    <asp:Label ID="Label6" runat="server" 
                        Text='<%# DataBinder.Eval(Container.DataItem,"ImageName") %>'></asp:Label>
                    </ItemTemplate>
                <EditItemTemplate><asp:TextBox runat="server" ID="tbImageName"></asp:TextBox>
                    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
                        ControlToValidate="tbImageName" ErrorMessage="*" ValidationExpression="\d*"></asp:RegularExpressionValidator>
                    </EditItemTemplate>
                </asp:TemplateColumn>
                <asp:TemplateColumn HeaderText="Des">
                 <ItemTemplate><asp:Label ID="Label1" runat="server" Text='<%#Eval("Des")%>' ></asp:Label>
                     <asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
                    </ItemTemplate>
                <EditItemTemplate><asp:TextBox ID="TextBox3" runat="server"></asp:TextBox></EditItemTemplate>
                
                </asp:TemplateColumn>
                <asp:TemplateColumn HeaderText="Path">
                 <ItemTemplate><asp:Label ID="Label2" runat="server" Text='<%#Eval("Path")%>' ></asp:Label>
                     <asp:Label ID="Label5" runat="server" Text="Label"></asp:Label>
                    </ItemTemplate>
                <EditItemTemplate><asp:TextBox ID="TextBox4" runat="server"></asp:TextBox></EditItemTemplate>
                </asp:TemplateColumn>
            
            </Columns>
       
        </asp:DataGrid>
            <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
                ConnectionString="<%$ ConnectionStrings:test_EmployeeInfo_SKConnectionString1 %>" 
                SelectCommand="SELECT * FROM [Images]"></asp:SqlDataSource>
    
    
    
    protected void dg1_EditCommand(object source, DataGridCommandEventArgs e)
        {
            this.dg1.EditItemIndex = e.Item.ItemIndex;
            this.dg1.DataBind();
        }  
    
        protected void dg1_CancelCommand(object source, DataGridCommandEventArgs e)
        {
    
        }
    
        protected void dg1_UpdateCommand1(object source, DataGridCommandEventArgs e)
        {
    
        }

    Microsoft Online Community Support
    2010年1月22日 2:55

全部回复

  • 写了这个事件后,你再查看HTML源码,有没有绑定了这个事件呢?
    2010年1月21日 3:26
  • 现在就是不知道如何绑定嘛,那是我自己随便测试的
    2010年1月21日 3:28
  • 用模板列 自己定义Button
    Memory all alone in the moonlight~My Blog in .NET~~~
    2010年1月21日 3:42
    版主
  • 好像页面首次加载时好像根本就看不到那个textbox控件,抑郁啊,
    2010年1月21日 3:44
  • 将这段代码放到datagrid的数据绑定事件里,DataBound
    2010年1月21日 9:08
  • Raymond Tang版主所言,用模板列就行了。在EditItemplate中用验证控件与其绑定就行了。
    可以参考下面的例子。
    <asp:DataGrid runat="server" ID="dg1" AutoGenerateColumns="False"  
                DataSourceID="SqlDataSource2" oneditcommand="dg1_EditCommand" oncancelcommand="dg1_CancelCommand" 
                onupdatecommand="dg1_UpdateCommand1">
            <Columns>
                <asp:EditCommandColumn CancelText="Cancel" EditText="Edit" UpdateText="Update" 
                    HeaderText="Edit">
                </asp:EditCommandColumn>
                <asp:TemplateColumn HeaderText="ImageName">
                <ItemTemplate>
                    <asp:Label ID="Label6" runat="server" 
                        Text='<%# DataBinder.Eval(Container.DataItem,"ImageName") %>'></asp:Label>
                    </ItemTemplate>
                <EditItemTemplate><asp:TextBox runat="server" ID="tbImageName"></asp:TextBox>
                    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
                        ControlToValidate="tbImageName" ErrorMessage="*" ValidationExpression="\d*"></asp:RegularExpressionValidator>
                    </EditItemTemplate>
                </asp:TemplateColumn>
                <asp:TemplateColumn HeaderText="Des">
                 <ItemTemplate><asp:Label ID="Label1" runat="server" Text='<%#Eval("Des")%>' ></asp:Label>
                     <asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
                    </ItemTemplate>
                <EditItemTemplate><asp:TextBox ID="TextBox3" runat="server"></asp:TextBox></EditItemTemplate>
                
                </asp:TemplateColumn>
                <asp:TemplateColumn HeaderText="Path">
                 <ItemTemplate><asp:Label ID="Label2" runat="server" Text='<%#Eval("Path")%>' ></asp:Label>
                     <asp:Label ID="Label5" runat="server" Text="Label"></asp:Label>
                    </ItemTemplate>
                <EditItemTemplate><asp:TextBox ID="TextBox4" runat="server"></asp:TextBox></EditItemTemplate>
                </asp:TemplateColumn>
            
            </Columns>
       
        </asp:DataGrid>
            <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
                ConnectionString="<%$ ConnectionStrings:test_EmployeeInfo_SKConnectionString1 %>" 
                SelectCommand="SELECT * FROM [Images]"></asp:SqlDataSource>
    
    
    
    protected void dg1_EditCommand(object source, DataGridCommandEventArgs e)
        {
            this.dg1.EditItemIndex = e.Item.ItemIndex;
            this.dg1.DataBind();
        }  
    
        protected void dg1_CancelCommand(object source, DataGridCommandEventArgs e)
        {
    
        }
    
        protected void dg1_UpdateCommand1(object source, DataGridCommandEventArgs e)
        {
    
        }

    Microsoft Online Community Support
    2010年1月22日 2:55