2010-03-12 8 views
0

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.

Répondre

0

Lorsque vous réglez votre DataList1.EditItemIndex cela s'applique à l'ensemble de l'article. Le modèle d'élément est remplacé par le modèle d'édition. Cela ne se fait pas sur la base du contrôle par contrôle, mais sur un modèle d'élément entier.

Votre EditTemplate comporte plusieurs zones de texte, de sorte que la ligne en mode édition reflétera l'intégralité de ce modèle et pas seulement un seul contrôle dans le modèle. Notez que vous définissez l'index d'édition de DataList dans son ensemble et que vous ne définissez pas le contrôle X dans DataList.

Si vous souhaitez contrôler le contrôle d'un niveau spécifique, vous devez le faire manuellement car le contrôle DataList était destiné à l'édition de lignes entières de données.