数据列表编辑模式

发布于 2024-08-24 12:18:23 字数 6959 浏览 8 评论 0原文

  <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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酸甜透明夹心 2024-08-31 12:18:23

当您设置 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 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文