checkbox itemtemplate不会更新到ASP GridView

时间:2016-12-21 16:48:18

标签: c# asp.net gridview checkbox

在ASP Gridview上查询SQL服务器库。

<asp:Content ID="i_cttContenu" runat="server" ContentPlaceHolderID="i_cphContenu">
    <asp:SqlDataSource ID="i_sdsGvOption" runat="server" ConnectionString="<%$ ConnectionStrings:... %>"
        SelectCommand=" SELECT *    FROM MyTable " SelectCommandType="Text"      
        UpdateCommand="UPDATE MyTable   SET [name] = @name, prenom = @prenom, isAlive = @isAlive WHERE idWsgProgramOption = @idWsgProgramOption" UpdateCommandType="Text" 
    </asp:SqlDataSource>

    <asp:UpdatePanel ID="i_up" runat="server">
        <ContentTemplate>
            <asp:GridView ID="i_gvOption" runat="server" AutoGenerateColumns="False" DataKeyNames="idWsgProgramOption"
                DataSourceID="i_sdsGvOption" EnableModelValidation="True">

                <Columns>
                    <asp:CommandField ButtonType="Image" CancelImageUrl="~/....gif"
                        CancelText="Annuler" EditImageUrl="~/....gif" 
                        EditText="Update" HeaderText="M"  UpdateImageUrl="~/....gif"
                        UpdateText="Save">
                    </asp:CommandField>


                    <asp:TemplateField HeaderText="Nom" SortExpression="name">
                        <ItemTemplate>
                            <asp:HyperLink ID="i_hlOption" runat="server" NavigateUrl='<%# Eval("idWsgProgramOption", "~/myURL") %>'
                                Text='<%# Eval("name") %>' />
                        </ItemTemplate>
                        <EditItemTemplate>
                            <table >
                                <tr>
                                    <td >
                                        <asp:TextBox ID="i_tbNom" runat="server" Text='<%# Bind("name") %>' />
                                    </td>
                                </tr>
                            </table>
                        </EditItemTemplate>
                    </asp:TemplateField>




                      <asp:TemplateField HeaderText="prenom" SortExpression="prenom">
                        <ItemTemplate>
                            <asp:HyperLink ID="i_hlprenom" runat="server" NavigateUrl='<%# Eval("prenom", "~/myURL") %>'
                                Text='<%# Eval("prenom") %>' />
                        </ItemTemplate>
                        <EditItemTemplate>
                            <table >
                                <tr>
                                    <td >
                                        <asp:TextBox ID="i_tbprenom" runat="server" Text='<%# Bind("prenom") %>' />
                                    </td>
                                </tr>
                            </table>
                        </EditItemTemplate>
                    </asp:TemplateField>



         <asp:TemplateField HeaderText="Obligatoire" >
                    <ItemTemplate>
                        <asp:CheckBox ID="CB_id1" runat="server"   />
                    </ItemTemplate>   
                     <EditItemTemplate>
                          <asp:CheckBox ID="CB_id2" runat="server"  />
                         </EditItemTemplate>                   
                </asp:TemplateField>


                </Columns>

            </asp:GridView>



        </ContentTemplate>        


    </asp:UpdatePanel>
</asp:Content>

单击更新按钮(第一列)时,不会调用update()方法。如果我将onUpdating事件添加到数据源中,则永远不会调用相应的方法。

导致问题的代码绝对是复选框。 如果我从数据源更新查询中删除: ,isAlive = @isAlive 并且只设置:

UPDATE MyTable   SET [name] = @name, prenom = @prenom, isAlive = @isAlive WHERE idWsgProgramOption = @idWsgProgramOption;

然后它更新正常(当然除了isAlive字段)。 我100%确定isAlive字段存在于base(bit type)中。

所以看起来我的问题来自这个集团:

  <asp:TemplateField HeaderText="Obligatoire" >
                    <ItemTemplate>
                        <asp:CheckBox ID="CB_id1" runat="server"   />
                    </ItemTemplate>   
                     <EditItemTemplate>
                          <asp:CheckBox ID="CB_id2" runat="server"  />
                         </EditItemTemplate>                   
                </asp:TemplateField>

有什么明显的错过吗?

此外,这是简化的代码,但如果我将“checked”属性设置为复选框并正确绑定,则“行”复选框是正确的字段。所以问题不会影响选择,只会影响更新。

1 个答案:

答案 0 :(得分:1)

尝试使用按钮列,以便指定特定的命令名称。

$argv

根据e.CommandName采取行动。