views:

259

answers:

1

i have a datalist control

        <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 behind:

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 StudentName=@studentname ,StdentRollNo=@studentroll where AdmissionNo=@admissionno", 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();

}

But it works fine.... but when i click edit command both the Fields

1.StudentName

2.StudentRollNo

im getting textboxes to all the fields where i placed textbox when i click 'edit' command and not the particular field alone . but i should get oly the textbox visible to the field to which i clik as 'edit' , and the rest remain same without showing textboxes even though it is in editmode

A: 

When you are setting your DataList1.EditItemIndex this applies to the whole item. The item template is replaced with the edit template. This is not done on a control by control basis but on a whole item template basis.

Your EditTemplate has multiple textboxes so the row that is in edit mode will reflect this entire template not just a single control within the template. Notice you are setting the whole DataList's edit index and not saying set control X within the DataList.

If you want control specific level edit templating you will need to do it manually as the DataList control was intended for editting of entire rows of data.

Kelsey