datalist编辑模式

时间:2010-03-12 11:20:42

标签: c# asp.net datalist

我有一个datalist控件

  <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

当我单击“编辑”命令而不是单独的特定字段时,我将文本框添加到我放置文本框的所有字段。但是我应该只将文本框显示给我点击的字段作为“编辑”,其余部分保持不变,即使它在editmode中也没有显示文本框。

1 个答案:

答案 0 :(得分:0)

当您设置DataList1.EditItemIndex时,这适用于整个项目。项目模板将替换为编辑模板。这不是基于控制的控制,而是基于整个项目模板。

您的EditTemplate有多个文本框,因此处于编辑模式的行将反映整个模板,而不仅仅是模板中的单个控件。请注意,您正在设置整个DataList的编辑索引,而不是在DataList中设置控件X.

如果您想要控制特定级别编辑模板,则需要手动执行此操作,因为DataList控件用于编辑整行数据。