datalist edit mode
I have a datalist control
<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 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.Da开发者_高级运维taKeys[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
I'm 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 only the textbox visible to the field to which I click as 'edit' and the rest remain same without showing textboxes even though it is in editmode.
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.
精彩评论