2010-02-07 30 views

Trả lời

1

Có, có thể.

Tôi đang chứng tỏ nó với các bảng Employee

Sử dụng các kịch bản SQL Server sau đây để tạo ra nhân viên thảo luận từ tên tbemployee

CREATE TABLE [dbo].[tbemployee](
[empid] [int] IDENTITY(1,1) NOT NULL, 
[ename] [varchar](50) NULL, 
[eadd] [varchar](50) NULL, 
[esal] [int] NULL, 
[edno] [int] NULL, 

CONSTRAINT [PK_tbemployee] PRIMARY KEY CLUSTERED 
(
    [empid] ASC 
) 
) ON [PRIMARY] 
GO 

Các mã nguồn cho Chèn kỷ lục vào FormView được hiển thị dưới đây:

FormView.aspx

<asp:FormView ID="FormView1" runat="server" DataKeyNames="empid" 
     oniteminserting="FormView1_ItemInserting" DefaultMode="Insert" 
     onmodechanging="FormView1_ModeChanging">    
     <InsertItemTemplate> 
      ename: 
      <asp:TextBox ID="txtename" runat="server" Text='<%# Bind("ename") %>' /> 
      <br /> 
      eadd: 
      <asp:TextBox ID="txteadd" runat="server" Text='<%# Bind("eadd") %>' /> 
      <br /> 
      esal: 
      <asp:TextBox ID="txtesal" runat="server" Text='<%# Bind("esal") %>' /> 
      <br /> 
      edno: 
      <asp:TextBox ID="txtedno" runat="server" Text='<%# Bind("edno") %>' /> 
      <br /> 
      <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" 
       CommandName="Insert" Text="Insert" /> 
      &nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server" 
       CausesValidation="False" CommandName="Cancel" Text="Cancel" /> 
     </InsertItemTemplate> 
     <ItemTemplate> 
      empid: 
      <asp:Label ID="empidLabel" runat="server" Text='<%# Eval("empid") %>' /> 
      <br /> 
      ename: 
      <asp:Label ID="enameLabel" runat="server" Text='<%# Bind("ename") %>' /> 
      <br /> 
      eadd: 
      <asp:Label ID="eaddLabel" runat="server" Text='<%# Bind("eadd") %>' /> 
      <br /> 
      esal: 
      <asp:Label ID="esalLabel" runat="server" Text='<%# Bind("esal") %>' /> 
      <br /> 
      edno: 
      <asp:Label ID="ednoLabel" runat="server" Text='<%# Bind("edno") %>' /> 
      <br /> 
      <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" 
       CommandName="New" Text="New" /> 
     </ItemTemplate> 
    </asp:FormView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="Data Source=gts7;Initial Catalog=dbemp14;Integrated Security=True;Pooling=False"    
     ProviderName="System.Data.SqlClient">   
    </asp:SqlDataSource> 

và trong Bộ luật Đằng sau của trang FormView.aspx dán đoạn mã sau:

FormView.aspx.cs

using System; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 

public partial class _Default : System.Web.UI.Page 
{ 
    SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString); 

protected void Page_Load(object sender, EventArgs e) 
{ 

} 

protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e) 
    { 
     string ename, eadd,insertqry; 
     Int32 esal, edno; 
     ename = ((TextBox)(FormView1.FindControl("txtename"))).Text; 
     eadd = ((TextBox)(FormView1.FindControl("txtename"))).Text; 
     esal = Convert.ToInt32(((TextBox)(FormView1.FindControl("txtesal"))).Text); 
     edno = Convert.ToInt32(((TextBox)(FormView1.FindControl("txtedno"))).Text); 

    insertqry="insert tbemployee(ename,eadd,esal,edno) values(@ename,@eadd,@esal,@edno)"; 

    if (con.State == ConnectionState.Closed) 
    { 
     con.Open(); 
    } 

    SqlCommand cmd = new SqlCommand(insertqry, con); 
    cmd.Parameters.Add("@ename", SqlDbType.VarChar, 50).Value = ename; 
    cmd.Parameters.Add("@eadd", SqlDbType.VarChar, 50).Value = eadd; 
    cmd.Parameters.Add("@esal", SqlDbType.Int).Value = esal; 
    cmd.Parameters.Add("@edno", SqlDbType.Int).Value = edno; 

    cmd.ExecuteNonQuery(); 
    cmd.Dispose(); 
    con.Close(); 

    FormView1.ChangeMode(FormViewMode.ReadOnly); 
    formbind(); 
} 

public void formbind() 
{ 
    if (FormView1.AllowPaging == true) 
    { 
     SqlDataAdapter adp = new SqlDataAdapter("select * from tbemployee", con); 
     DataSet ds = new DataSet(); 
     adp.Fill(ds); 

     Int32 totrecords = ds.Tables[0].Rows.Count; 
     Int32 currentpageindex = totrecords - 1; 
     FormView1.PageIndex = currentpageindex; 
     FormView1.DataSource = ds; 
     FormView1.DataBind(); 
    } 
    else 
    { 
     SqlDataAdapter adp = new SqlDataAdapter("select * from tbemployee where empid in (select isnull(max(empid),0) from tbemployee)", con); 
     DataSet ds = new DataSet(); 
     adp.Fill(ds); 
     FormView1.DataSource = ds; 
     FormView1.DataBind(); 
    } 
} 

protected void FormView1_ModeChanging(object sender, FormViewModeEventArgs e) 
{ 
    FormView1.ChangeMode(e.NewMode); 
    formbind(); 
} 
1

Có một giải pháp đó là IMHO đơn giản hơn nhiều.

Sử dụng dữ liệu ở trên (@ SK-INFOPOINT), tôi sẽ viết FormView1.aspx của tôi rất giống với chỉ một vài thay đổi nhỏ để mặc định thành chế độ "ReadOnly" và đưa các lệnh Chèn và chọn SQL vào SQLAdapter trông như thế này:

FormView1.aspx

<asp:FormView ID="FormView1" runat="server" DataKeyNames="empid" 
    oniteminserting="FormView1_ItemInserting" DefaultMode="ReadOnly" 
    onmodechanging="FormView1_ModeChanging">    
    <InsertItemTemplate> 
     ename: 
     <asp:TextBox ID="txtename" runat="server" Text='<%# Bind("ename") %>' /> 
     <br /> 
     eadd: 
     <asp:TextBox ID="txteadd" runat="server" Text='<%# Bind("eadd") %>' /> 
     <br /> 
     esal: 
     <asp:TextBox ID="txtesal" runat="server" Text='<%# Bind("esal") %>' /> 
     <br /> 
     edno: 
     <asp:TextBox ID="txtedno" runat="server" Text='<%# Bind("edno") %>' /> 
     <br /> 
     <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" 
      CommandName="Insert" Text="Insert" /> 
     &nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server" 
      CausesValidation="False" CommandName="Cancel" Text="Cancel" /> 
    </InsertItemTemplate> 
    <ItemTemplate> 
     empid: 
     <asp:Label ID="empidLabel" runat="server" Text='<%# Eval("empid") %>' /> 
     <br /> 
     ename: 
     <asp:Label ID="enameLabel" runat="server" Text='<%# Bind("ename") %>' /> 
     <br /> 
     eadd: 
     <asp:Label ID="eaddLabel" runat="server" Text='<%# Bind("eadd") %>' /> 
     <br /> 
     esal: 
     <asp:Label ID="esalLabel" runat="server" Text='<%# Bind("esal") %>' /> 
     <br /> 
     edno: 
     <asp:Label ID="ednoLabel" runat="server" Text='<%# Bind("edno") %>' /> 
     <br /> 
     <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" 
      CommandName="New" Text="New" /> 
    </ItemTemplate> 
</asp:FormView> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="Data Source=gts7;Initial Catalog=dbemp14;Integrated Security=True;Pooling=False"    
    ProviderName="System.Data.SqlClient" 
    SelectCommand="select * from tbemployee" 
    InsertCommand="insert into tbemployee (ename,eadd,esal,edno) values (@ename, @eadd, @esal, @edno)">   
</asp:SqlDataSource> 

Điều này cho phép các nút và các mẫu để làm hầu hết các chức năng mà không cần phải bằng tay mã chèn và chọn. Sau đó, tôi sẽ thêm chỉ này trong Bộ luật Đằng sau của trang FormView.aspx đoạn mã sau:

FormView.aspx.cs

using System; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 

public partial class _Default : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void FormView1_ItemInserted(object sender, FormViewInsertedEventArgs e) 
    { 
     DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty); 
     FormView1.PageIndex = dv.Count - 1; 
    } 
} 

Và bạn đang hiển thị mục mới ràng buộc của bạn trong chế độ ReadOnly. Và, nếu bạn thêm một mẫu phân trang đơn giản để FormView, bạn có thể di chuyển lên và xuống các hồ sơ tuy nhiên bạn vui lòng ...

:)

- Schnizzles

Các vấn đề liên quan