数据列表编辑模式
我
<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>
后面有一个数据列表控制代码:
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();
}
但它工作正常......但是当我单击编辑命令时,两个字段
1.StudentName
2.StudentRollNo
我将在单击“编辑”时放置文本框的所有字段中获取文本框命令而不是单独的特定领域。但我应该只让我单击为“编辑”的字段可见的文本框,其余部分保持不变,而不显示文本框,即使它处于编辑模式。
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.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
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您设置
DataList1.EditItemIndex
时,这适用于整个项目。项目模板被替换为编辑模板。这不是在逐个控制的基础上完成的,而是在整个项目模板的基础上完成的。您的
EditTemplate
有多个文本框,因此处于编辑模式的行将反映整个模板,而不仅仅是模板中的单个控件。请注意,您正在设置整个 DataList 的编辑索引,而不是在DataList
中设置控件 X。如果您想要控制特定级别的编辑模板,则需要手动执行此操作,因为
DataList
控件旨在编辑整行数据。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 theDataList
.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.