是否有可能讓FormView自動在它剛剛通過InsertItemTemplate插入的記錄上默認爲ReadOnly模式?看起來這應該是一些自然而然應該成爲FormView的東西。將ASP.NET FormView自動綁定到新插入的記錄
6
A
回答
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" />
<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" />
<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
相關問題
- 1. 如何將ASP.NET FormView綁定到單個記錄?
- 2. 使用模型綁定將模型手動綁定到ASP.NET FormView
- 3. 如何自動對新記錄插入
- 4. FormView插入一個新行C#和ASP.NET
- 5. 如何將新記錄添加到Lightswitch的父表中時自動將新記錄插入到子表中?
- 6. Formview中的Dropdownlist將不會在插入模式下綁定
- 7. Mysql如果不存在,則自動插入特定記錄,或者如果特定記錄更新,則自動插入新記錄
- 8. 當新記錄添加到父表時,自動將新記錄插入到子表中?
- 9. Magento 1.9.1更新自定義模塊中的記錄,嘗試插入新記錄
- 10. ASP.NET C# - 插入記錄後重定向
- 11. 將FormView綁定到數據集
- 12. 將導航屬性綁定到formview
- 13. FormView手動數據綁定
- 14. 當TableA記錄被創建時,MySQL自動將記錄插入到TableB中
- 15. 在asp.net中插入記錄
- 16. SDE自動ID插入多個記錄
- 17. 自動更新ListView一旦一個新的記錄插入到數據庫
- 18. 是否插入/更新/刪除記錄自動更新索引?
- 19. 用自動生成的ID插入一條新記錄
- 20. 在ASP.NET FormView中綁定控件
- 21. 將歷史記錄插入新表
- 22. C#.NET4.0 TableAdapter.Update()將不插入新記錄
- 23. 將記錄插入新工作表
- 24. Netsuite - 將動態記錄數添加到自定義記錄中?
- 25. vb.net linq插入新記錄
- 26. 插入記錄到在SQL
- 27. 插入新記錄到數據庫
- 28. 根據LINQ中插入記錄的ID更新記錄到SQL
- 29. 試圖插入新記錄
- 30. 插入記錄