2010-02-07 60 views

回答

1

是的,这是可能的。

我与Employee表

使用下面的SQL Server脚本来创建员工展示其提交讨论命名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 

插入记录到FormView控件的源代码如下所示:

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> 

,并在代码FormView.aspx页的背后粘贴以下代码:

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

还有另一种解决方案是简单得多恕我直言。

使用上面的(@ SK-INFOPOINT)数据,我会写我的FormView1.aspx非常相似,只有一些小的更改默认为“ReadOnly”模式,并将SQL插入和选择命令放入SQLAdapter看起来像这样:

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> 

这使得按键和模板来完成大部分的功能,而不需要手工编码的插入和选择。然后我想补充这只是在代码下面的代码的FormView.aspx页面背后:

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; 
    } 
} 

而你以只读模式显示您绑定的新项目。而且,如果你添加一个简单的页面模板,你的FormView控件,您可以导航向上和向下的记录但是请你...

:)

- Schnizzles