J'ai un contrôle datalistmode d'édition datalist
<asp:DataList ID="DataList1" runat="server" DataKeyField="AdmissionNo" OnCancelCommand="DataList1_CancelCommand1"
OnEditCommand="DataList1_EditCommand1" OnUpdateCommand="DataList1_UpdateCommand1"
Width="300px">
<ItemTemplate>
<tr>
<td height="31px">
<asp:Label ID="lblStudentName" runat="server" Text="StudentName :" Font-Bold="true"></asp:Label>
<%# DataBinder.Eval(Container.DataItem, "StudentName") %>
</td>
<td height="31px">
<asp:LinkButton ID="lnkEdit" runat="server" CommandName="edit">Edit</asp:LinkButton>
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblAdmissionNo" runat="server" Text="AdmissionNo :" Font-Bold="true"></asp:Label>
<%# DataBinder.Eval(Container.DataItem, "AdmissionNo")%>
</td>
</tr>
<tr>
<td height="31px">
<asp:Label ID="lblStudentRollNo" runat="server" Text="StdentRollNo :" Font-Bold="true"></asp:Label>
<%# DataBinder.Eval(Container.DataItem, "StdentRollNo") %>
</td>
<td height="31px">
<asp:LinkButton ID="lnkEditroll" runat="server" CommandName="edit">Edit</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
<EditItemTemplate>
<tr>
<td height="31px">
<asp:Label ID="lblStudentName" runat="server" Text="StudentName :" Font-Bold="true"></asp:Label>
<asp:TextBox ID="txtProductName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "StudentName") %>'></asp:TextBox>
</td>
<td>
<asp:LinkButton ID="lnkUpdate" runat="server" CommandName="update">Update</asp:LinkButton>
<asp:LinkButton ID="lnkCancel" runat="server" CommandName="cancel">Cancel</asp:LinkButton>
</td>
</tr>
<tr>
<td height="31px">
<asp:Label ID="lblAdmissionNo" runat="server" Text="AdmissionNo :" Font-Bold="true"></asp:Label>
<%# DataBinder.Eval(Container.DataItem, "AdmissionNo")%>
</td>
</tr>
<tr>
<td height="31px">
<asp:Label ID="lblStudentRollNo" runat="server" Text="StudentRollNo :" Font-Bold="true"></asp:Label>
<asp:TextBox ID="txtStudentRollNo" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "StdentRollNo") %>'></asp:TextBox>
</td>
<td>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="update">Update</asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CommandName="cancel">Cancel</asp:LinkButton>
</td>
</tr>
</EditItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:DataList>
Code
derrière:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt = obj.GetSamples();
DataList1.DataSource = dt;
DataList1.DataBind();
}
}
public void DataBind()
{
DataTable dt = new DataTable();
dt = obj.GetSamples();
DataList1.DataSource = dt;
DataList1.DataBind();
}
protected void DataList1_EditCommand1(object source, DataListCommandEventArgs e)
{
DataList1.EditItemIndex = e.Item.ItemIndex;
DataBind();
}
protected void DataList1_CancelCommand1(object source, DataListCommandEventArgs e)
{
DataList1.EditItemIndex = -1;
DataBind();
}
protected void DataList1_UpdateCommand1(object source, DataListCommandEventArgs e)
{ // Get the DataKey value associated with current Item Index.
// int AdmissionNo = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);
string AdmissionNo = DataList1.DataKeys[e.Item.ItemIndex].ToString();
// Get updated value entered by user in textbox control for
// ProductName field.
TextBox txtProductName;
txtProductName = (TextBox)e.Item.FindControl("txtProductName");
TextBox txtStudentRollNo;
txtStudentRollNo = (TextBox)e.Item.FindControl("txtStudentRollNo");
// string variable to store the connection string
// retrieved from the connectionStrings section of web.config
string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
// sql connection object
SqlConnection mySqlConnection = new SqlConnection(connectionString);
// sql command object initialized with update command text
SqlCommand mySqlCommand = new SqlCommand("update SchoolAdmissionForm set [email protected] ,[email protected] where [email protected]", mySqlConnection);
mySqlCommand.Parameters.Add("@studentname", SqlDbType.VarChar).Value = txtProductName.Text;
mySqlCommand.Parameters.Add("@admissionno", SqlDbType.VarChar).Value = AdmissionNo;
mySqlCommand.Parameters.Add("@studentroll", SqlDbType.VarChar).Value = txtStudentRollNo.Text;
// check the connection state and open it accordingly.
if (mySqlConnection.State == ConnectionState.Closed)
mySqlConnection.Open();
// execute sql update query
mySqlCommand.ExecuteNonQuery();
// check the connection state and close it accordingly.
if (mySqlConnection.State == ConnectionState.Open)
mySqlConnection.Close();
// reset the DataList mode back to its initial state
DataList1.EditItemIndex = -1;
DataBind();
// BindDataList();
}
Mais il fonctionne très bien .... mais quand je clique sur commande modifier à la fois les champs
1 .StudentName
2.StudentRollNo
Je reçois des zones de texte à tous les champs où j'ai placé la zone de texte lorsque je clique sur 'edit' commande et pas le champ particulier seul. mais je devrais obtenir seulement la zone de texte visible sur le champ auquel je clique comme 'éditer' et le reste reste même sans montrer les zones de texte même si elle est dans editmode.