【问题标题】:"Update/Cancel" buttons don't appear in TemplateField Edit button“更新/取消”按钮不会出现在 TemplateField 编辑按钮中
【发布时间】:2013-08-10 19:43:27
【问题描述】:

当您使用CommandField 在 Gridview 的每一行中创建一个编辑按钮时,它会在单击后显示更新/取消按钮,因此您可以接受/取消更改。 但是,我想要一个具有工具提示文本的编辑按钮,并且由于CommandField 没有工具提示属性,因此我使用了TemplateField。它适用于删除按钮,但我遇到了编辑按钮的问题:

<asp:GridView ID="GridView1" runat="server" 
                    AllowPaging="True" AllowSorting="True"
                    DataMember="DefaultView" 
                    DataSourceID="SqlDataSource1" AutoGenerateColumns="False" 
                    DataKeyNames=FIELD,FIELD,FIELD" CellPadding="4" ForeColor="#333333" Width="90%"
                    Height="90%" Font-Size="Small">
                    <RowStyle BackColor="#EFF3FB" />
                    <Columns>
                        <asp:BoundField DataField="FIELD" HeaderText="FIELD" ReadOnly="True" 
                            SortExpression="FIELD" />
                        <asp:BoundField DataField="FIELD" HeaderText="FIELD" 
                            SortExpression="FIELD" />
                        <asp:BoundField DataField="FIELD" HeaderText="FIELD" 
                            SortExpression="FIELD" />
                        <asp:BoundField DataField="FIELD" HeaderText="FIELD" ReadOnly="True" 
                            SortExpression="FIELD" />
                        <asp:BoundField DataField="FIELD" HeaderText="FIELD" ReadOnly="True" 
                            SortExpression="FIELD" />
                        <asp:BoundField DataField="FIELD" HeaderText="FIELD" 
                            SortExpression="FIELD" />                        
                            <asp:CommandField ButtonType="Image"  Visible="true" EditText="Edit" ShowEditButton="True" EditImageUrl="images/pencil1.png"></asp:CommandField>                            
                            <asp:TemplateField >
                            <ItemTemplate>
                             <asp:ImageButton ID="deleteButton" runat="server" CommandName="Delete" Text="Delete" 
                                        OnClientClick="return confirm('¿Are you sure?');" ToolTip="delete" ImageUrl="images/DeleteRed1.png" />
                            </ItemTemplate>                                     
                            </asp:TemplateField>
                    </Columns>                    
                    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                    <EditRowStyle BackColor="#2461BF" />
                    <AlternatingRowStyle BackColor="White" />
                </asp:GridView>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                    ConnectionString="<%$ ConnectionStrings:DBUserInterfaceConnectionString %>"                     
                    SelectCommand="SELECT ... FROM ...  INNER JOIN ... ON ..."
                    DeleteCommand="DELETE FROM ... WHERE ...=@param;"
                    UpdateCommand="UPDATE ... SET ... = @param, ... = @param2 WHERE ... = @param3 and ... = @param4 and ... = @param5;"
                    >
                    </asp:SqlDataSource>

正如我之前所说,我将CommandField 替换为:

<asp:TemplateField >
<ItemTemplate> 
<asp:ImageButton ID="editButton" runat="server" CommandName="Edit" Text="Edit" ToolTip="Edit" ImageUrl="images/pincel1.png" />  
</ItemTemplate>
</asp:TemplateField >

但没有出现“更新/取消”按钮,所以我无法更新/编辑任何内容。为什么会这样?

有什么想法可以实现一个成功的编辑按钮吗?

注意事项:

  1. 两个按钮后面都没有vb代码,由于某种原因,删除按钮只适用于SqlDataSource中的DeleteCommand,如果我尝试删除命令,它会提示错误,因为没有指定DeleteCommand .

  2. UpdateCommand没有目的,可以删除。我可以将它用作更新按钮而不是编辑按钮,但是当我尝试时,它说 @params 未知,这就是我决定改用编辑按钮的原因。

【问题讨论】:

    标签: asp.net vb.net gridview templatefield commandfield


    【解决方案1】:

    &lt;asp:TemplateField&gt; 用于为 GridView 控件中的每个项目设置自己定义的内容,即用户定义的内容。

    &lt;asp:CommandField&gt; 在您想要使用预定义的命令按钮执行选择、编辑或删除操作时使用。检查MSDN here

    因此,当您使用自己的用户定义方式编辑按钮时,您还需要在&lt;EditItemTemplate&gt; 中为更新和取消按钮指定自定义内容方式:

    <asp:TemplateField>            
      <ItemTemplate> 
      <asp:ImageButton ID="editButton" runat="server" CommandName="Edit" Text="Edit" 
         ToolTip="Edit" ImageUrl="images/pincel1.png" />  
      </ItemTemplate>            
      <EditItemTemplate>
      <asp:ImageButton ID="BtnUpdate" runat="server" CommandName="Update" Text="Update" 
         OnClick="BtnUpdate_Click" ImageUrl="images/Update.png"/>
      <asp:ImageButton ID="BtnCancel" runat="server" CommandName="Cancel" Text="Cancel" 
         OnClick="BtnCancel_Click" ImageUrl="images/Cancel.png"/>
      </EditItemTemplate>        
    </asp:TemplateField>
    

    并且只需确保,仅当您再次为更新和取消逻辑提供自定义实现时,您还要为这两个更新和取消按钮定义 onclick 事件。否则从这些按钮的标记中删除OnClick。 [BtnUpdate_Click & BtnCancel_Click 在这里。]

    【讨论】:

    • 太好了,成功了。另一个问题:如果我使用默认实现(没有 Btn_Click 事件),它是否容易受到 SQL 注入的影响?
    • 这在很大程度上取决于您使用 SQL 语句的方式。您正在为您的 Gridview 使用 SqlDataSource,因此,如果您不将查询与 UserInput 连接或不使用任何动态 sql,通常它会提供相当程度的安全性。这并不意味着您不应该使用动态 sql 或连接您的查询,但这意味着您必须特别注意防止 SQL 注入。检查这些链接:devproconnections.com/aspnet/sqldatasource-safe,所以问题:stackoverflow.com/questions/5144566/…
    • 另外,MSDN 链接将帮助您入门:msdn.microsoft.com/en-us/library/ff648339.aspx
    【解决方案2】:

    我认为自从您将其转换为 TemplateField 后,所有自动运行的东西(如更新/取消按钮)都已被禁用。我打赌您需要使用更新和取消按钮添加&lt;EditItemTemplate&gt;,并使用CommandName 将它们连接到相关命令。

    【讨论】:

    • 它不起作用,我应该在 CommandName 中输入什么?我要么“编辑”要么“提交”点击时它什么都不做。取消按钮确实有效。
    • 我认为您在其 CommandName 字段中输入了“更新”和“取消”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2014-06-12
    • 2012-07-15
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    相关资源
    最近更新 更多