C# 数据列表编辑模式
我有一个数据列表控件C# 数据列表编辑模式,c#,asp.net,datalist,C#,Asp.net,Datalist,我有一个数据列表控件 <asp:DataList ID="DataList1" runat="server" DataKeyField="AdmissionNo" OnCancelCommand="DataList1_CancelCommand1" OnEditCommand="DataList1_EditCommand1" OnUpdateCommand="DataList1_UpdateCommand1" Width="300px"&
<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>
但它很好用。。。。但当我单击“编辑命令”时,两个字段
1.学生姓名
2.StudentRollNo
当我单击“编辑”命令时,我将文本框添加到我放置文本框的所有字段,而不仅仅是特定字段。但是,我应该只让我单击的字段可见的文本框作为“编辑”,其余的文本框保持不变,即使在编辑模式下也不显示文本框。当设置DataList1.EditItemIndex时,这适用于整个项目。项目模板将替换为编辑模板。这不是在逐个控件的基础上完成的,而是在整个项目模板的基础上完成的
EditTemplate有多个文本框,因此处于编辑模式的行将反映整个模板,而不仅仅是模板中的单个控件。请注意,您正在设置整个数据列表的编辑索引,而不是在数据列表中指定set control X
如果需要控件特定级别的编辑模板,则需要手动执行,因为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();
}