I want to edit a Datalist values and update but I can't see why the update procedure does not modify the text. What I have is
Page view
<asp:Panel ID="Panel1" runat="server"> <div id="DivIntrebare" runat="server" Visible="false"> <div class="row no-gutters mb-4"> <asp:DataList ID="DataList1" runat="server" style="width:100%" DataKeyField="IdIntrebare" OnEditCommand="DataList1_EditCommand" OnUpdateCommand="DataList1_UpdateCommand" OnCancelCommand="DataList1_CancelCommand" OnDeleteCommand="DataList1_DeleteCommand"> <HeaderTemplate> <div class="row no-gutters"> <div class="col-1"> <asp:Label Text="Sectiune" class="form-control form-control-sm lfc-green" runat="server" /> </div> <div class="col-4"> <asp:Label Text="Procedura" class="form-control form-control-sm lfc-green" runat="server" /> </div> <div class="col-7"> <asp:Label Text="Intrebare" class="form-control form-control-sm lfc-green" runat="server" /> </div> </div> </HeaderTemplate> <ItemTemplate> <div class="row no-gutters"> <div class="col-1"> <asp:TextBox ID="txtSectiune" ReadOnly="true" class="form-control form-control-sm bg-white" runat="server" Text='<%#Eval("Sectiune")%>' /> <asp:Button ID="btnEdit" Text="Edit" runat="server" CommandName="Edit" CausesValidation="false" UseSubmitBehavior="False" class="btn lfc-green col-12 m-0 p-0" style="font-size:14px; height:22px" /> <asp:Button ID="btnDelete" Text="Delete" runat="server" CommandName="Delete" CausesValidation="false" UseSubmitBehavior="False" class="btn lfc-red col-12 m-0 p-0" style="font-size:14px; height:22px" /> </div> <div class="col-4"> <asp:TextBox ID="txtCodProcedura" ReadOnly="true" class="form-control form-control-sm bg-white" runat="server" Text='<%#Eval("CodProcedura")%>' /> <asp:TextBox ID="txtProcedura" ReadOnly="true" class="form-control form-control-sm bg-white text-uppercase" runat="server" TextMode="MultiLine" Rows="2" style="resize:none;" Text='<%#Eval("Procedura")%>' /> </div> <div class="col-7"> <asp:TextBox ID="txtIntrebare" ReadOnly="true" class="form-control form-control-sm bg-white text-uppercase" runat="server" TextMode="MultiLine" Rows="4" style="resize:none; height:83px;" Text='<%#Eval("Intrebare")%>' /> <asp:TextBox ID="txtID" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"IdIntrebare")%>' Visible="false"/> </div> </div> <hr /> </ItemTemplate> <EditItemTemplate> <div class="row no-gutters"> <div class="col-1"> <asp:TextBox ID="txtSectiune" ReadOnly="true" class="form-control form-control-sm bg-white" runat="server" Text='<%#Eval("Sectiune")%>' /> <asp:Button ID="btnUpdate" Text="Update" runat="server" CommandName="Update" CausesValidation="false" UseSubmitBehavior="False" class="btn bg-primary col-12 m-0 p-0" style="font-size:14px; height:22px" /> <asp:Button ID="btnCancel" Text="Cancel" runat="server" CommandName="Cancel" CausesValidation="false" UseSubmitBehavior="False" class="btn bg-warning col-12 m-0 p-0" style="font-size:14px; height:22px" /> </div> <div class="col-4"> <asp:TextBox ID="txtCodProcedura" ReadOnly="true" class="form-control form-control-sm bg-white" runat="server" Text='<%#Eval("CodProcedura")%>' /> <asp:TextBox ID="txtProcedura" ReadOnly="true" class="form-control form-control-sm text-uppercase bg-white" runat="server" TextMode="MultiLine" Rows="2" style="resize:none;" Text='<%#Eval("Procedura")%>' /> </div> <div class="col-7"> <asp:TextBox ID="txtIntrebare" class="form-control form-control-sm text-uppercase" runat="server" TextMode="MultiLine" Rows="4" style="resize:none; height:83px;" Text='<%#Eval("Intrebare")%>' /> <asp:TextBox ID="txtID" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"IdIntrebare")%>' Visible="false"/> <asp:TextBox ID="txtIDP" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"IdProcedura")%>' Visible="false"/> </div> </div> </EditItemTemplate> </asp:DataList> </div> </div> </asp:Panel>
code behind
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e) { using (SqlConnection conn = new SqlConnection(connString)) { int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex].ToString()); TextBox txtIntrebare = (TextBox)e.Item.FindControl("txtIntrebare"); string sqlQuery = "UPDATE tblIntrebare SET Intrebare=@Intrebare WHERE IdIntrebare=@id"; using (SqlCommand cmd = new SqlCommand(sqlQuery, conn)) { cmd.CommandType = CommandType.Text; cmd.Parameters.Add("@id", SqlDbType.Int).Value = id; cmd.Parameters.Add("@Intrebare", SqlDbType.NVarChar).Value = txtIntrebare.Text; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); } DataList1.EditItemIndex = -1; LoadData(); } }
So, on update the int id is correct but txtIntrebare is not modified at all