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();

    }