DataGrid 中新增資料
做了一個示例,使用者更新的資料儲存在Session中,點選“更新資料來源”按鈕後將Session中的資料更新到資料庫中,可以在 http://www.webdiyer.com/demo/editdatagrid.aspx 看到演示效果:
檔案程式碼:
test.aspx
===========================>
<%@ Page Language="C#" Debug="True"%>
<%@Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.SqlClient" %> <script language="C#" runat="server">
const string DataTableName="Employees";
SqlConnection conn;
SqlDataAdapter adapter;
void Page_Load(Object src, EventArgs e)
{
conn=new SqlConnection("server=(local);database=pubs;uid=sa;pwd=");
adapter=new SqlDataAdapter("select * from employees",conn);
if(!Page.IsPostBack){
BindData();
}
} //繫結資料
void BindData(){
//先從Session中獲取DataTable
DataTable table=(DataTable)Session[DataTableName];
//若Session中的DataTable不存在,則從資料庫獲取資料
if(table==null){
table=new DataTable();
adapter.Fill(table);
//將DataTable儲存到Session中
SaveTableToSession(table);
table.Columns["id"].AutoIncrement=true;
}
grid.DataSource=table;
grid.DataBind();
} void ChangePage(object src,DataGridPageChangedEventArgs e){
grid.CurrentPageIndex=e.NewPageIndex;
BindData();
} void UpdateDataTable(object src,EventArgs e){
try{
DataTable table=GetTableFromSession();
string name;
byte age;
string address;
CheckBox ckdel;
for(int i=0;i<grid.Items.Count;i++){
DataGridItem dgitem=grid.Items[i];
int empId=(int)grid.DataKeys[dgitem.ItemIndex];
ckdel=dgitem.FindControl("delckb") as CheckBox;
name=((TextBox)dgitem.Cells[0].Controls[1]).Text;
age=byte.Parse(((TextBox)dgitem.Cells[1].Controls[1]).Text);
address=((TextBox)dgitem.Cells[2].Controls[1]).Text;
UpdateEmployee(table,empId,name,age,address,ckdel.Checked);
}
SaveTableToSession(table);
cancelbtn.Enabled=true;
int rowcount=0;
foreach(DataRow row in table.Rows){
if(row.RowState!=DataRowState.Deleted)
rowcount++;
}
if(Math.Ceiling(rowcount/5.0)==grid.CurrentPageIndex&&grid.CurrentPageIndex>0)
grid.CurrentPageIndex-=1;
BindData();
msglbl.Text="更新資料表成功!";
}
catch(Exception ex){
msglbl.Text="更新資料表失敗,出現意外錯誤:"+ex.Message;
}
}
void UpdateEmployee(DataTable table,int id,string name,byte age,string address,bool isDelete){
for(int i=0;i<table.Rows.Count;i++){
DataRow row=table.Rows[i];
//如果選中了刪除核取方塊,就直接就該行資料刪除,不用再更新,否則更新該行資料
if(row!=null&&row.RowState!=DataRowState.Deleted){
if((int)row["id"]==id){
if(!isDelete){
row["name"]=name;
row["age"]=age;
row["address"]=address;
}
else
row.Delete();
}
}
}
msglbl.Text="更新資料表成功!";
} void UpdateDataBase(object src,EventArgs e){
try{
DataTable table=GetTableFromSession();
SqlCommandBuilder cmdbd=new SqlCommandBuilder(adapter);
adapter.Update(table);
msglbl.Text="更新資料來源成功!";
cancelbtn.Enabled=false;
}
catch(Exception ex){
msglbl.Text="更新資料來源失敗,出現意外錯誤:"+ex.Message;
}
BindData();
} void CancelUpdate(object src,EventArgs e){
DataTable table=GetTableFromSession();
table.RejectChanges();
grid.CurrentPageIndex=0;
BindData();
cancelbtn.Enabled=false;
} void AddNewEmployee(object src,DataGridCommandEventArgs e){
if(e.CommandName=="Add"){
try{
DataTable table=GetTableFromSession();
string name=((TextBox)e.Item.FindControl("newname")).Text;
byte age=byte.Parse(((TextBox)e.Item.FindControl("newage")).Text);
string address=((TextBox)e.Item.FindControl("newaddress")).Text;
DataRow row=table.NewRow();
row["name"]=name;
row["age"]=age;
row["address"]=address;
table.Rows.Add(row);
SaveTableToSession(table);
//重新繫結資料
BindData();
msglbl.Text="新增新記錄成功!";
cancelbtn.Enabled=true;
}
catch(Exception ex){
msglbl.Text="未能新增新記錄,出現意外錯誤:"+ex.Message;
}
}
} //將DataTable儲存到session中
void SaveTableToSession(DataTable table){
Session[DataTableName]=table;
} //從Session中獲取DataTable
DataTable GetTableFromSession(){
DataTable table=(DataTable)Session[DataTableName];
if(table!=null){
return table;
}
else{
msglbl.Text="未能從Session中獲取資料,可能Session已超時,請重新整理或重新開啟當前頁面!";
return null;
}
}
</script>
<html>
<head>
<title> Webdiyer製造:)</title>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Webdiyer(http://www.webdiyer.com)">
</head>
<body> <form runat="server">
<asp:DataGrid runat="server" id="grid" AutogenerateColumns=false DataKeyField="id" ShowFooter=true AllowPaging=true PageSize=5 OnPageIndexChanged="ChangePage" PagerStyle-Mode="numericpages" OnItemCommand="AddNewEmployee">
<Columns>
<asp:TemplateColumn HeaderText="姓名">
<ItemTemplate>
<asp:TextBox runat="server" id="name" Text= <%#DataBinder.Eval(Container.DataItem,"name")%> />
</ItemTemplate>
<FooterTemplate>
<asp:TextBox runat="server" id="newname"/>
</FooterTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="年齡">
<ItemTemplate>
<asp:TextBox runat="server" id="age" Text= <%#DataBinder.Eval(Container.DataItem,"age")%> />
</ItemTemplate>
<FooterTemplate>
<asp:TextBox runat="server" id="newage"/>
</FooterTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="住址">
<ItemTemplate>
<asp:TextBox runat="server" id="address" Text= <%#DataBinder.Eval(Container.DataItem,"address")%> />
</ItemTemplate>
<FooterTemplate>
<asp:TextBox runat="server" id="newaddress"/>
</FooterTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="刪除">
<ItemTemplate>
<asp:CheckBox runat="server" id="delckb"/>
</ItemTemplate>
<FooterTemplate>
<asp:Button runat="server" Text="新增" CommandName="Add"/>
</FooterTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<asp:Label runat="server" EnableViewState="false" id="msglbl" ForeColor="red"/>
<div>
<asp:Button runat="server" id="updatebtn" Text="更新資料表" OnClick="UpdateDataTable"/>
<asp:Button runat="server" id="cancelbtn" Text="取消對資料表的更新" Enabled=false OnClick="CancelUpdate"/>
<asp:Button runat="server" id="updatedbtbn" Text="更新資料來源" OnClick="UpdateDataBase"/>
</div>
<div>
說明:DataGrid中的資料型別都沒有進行驗證,如果輸入錯誤的資料型別或空值可能會出錯,實際應用中應該對使用者輸入的資料進行驗證!
</div>
</form> </body>
</html>
資料庫中employees表結構: CREATE TABLE employees (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[age] [tinyint] NOT NULL ,
[address] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO ALTER TABLE employees ADD
CONSTRAINT [PK_employees] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GO
相關文章
- WPF中Datagrid控制元件新增行號控制元件
- datagrid 頁面新增合計值
- PHP中CakePHP新增資料庫PHP資料庫
- 通過python操控MYSQL新增資料,並將資料新增到EXCEL中PythonMySqlExcel
- 新增資料
- WPF datagrid mvvm multi select via customize datagridMVVM
- IndexedDB 資料庫新增資料Index資料庫
- indexedDB 新增資料Index
- C#中DataGrid匯出Excel檔案C#Excel
- 向資料庫中插入一條新的資料,並返回新增資料的ID資料庫
- 使用property為類中的資料新增行為
- Mysql DML 新增資料MySql
- indexedDB 批量新增資料Index
- WPF DataGrid ItemsSource StaticResource
- wpf datagrid樣式
- 如何用flask在資料庫新增資料Flask資料庫
- WPF/C#:在DataGrid中顯示選擇框C#
- SQLServer批量新增資料庫SQLServer資料庫
- oracle批量新增更新資料Oracle
- jQuery、ajax新增Json資料jQueryJSON
- MySQL8.0.18資料庫新增資料檔案MySql資料庫
- WPF datagrid scrollintoview in ViewModel of MVVMViewMVVM
- WPF Datagrid display via DataGridTemplateColumn
- easyui datagrid 禁止選中行UI
- orm中使用modelForm新增資料ORM
- XamarinSQLite教程新增測試資料SQLite
- WPF datagrid show ImageBrush via DataGridTemplateColumn
- 【轉載】WPF中TreeView控制元件資料繫結和後臺動態新增資料(一)View控制元件
- SOLIDWORKS 2023新增功能 - PDM資料管理Solid
- .bashrc 給資料夾新增顏色
- 新增時--sqlserver資料庫跟蹤SQLServer資料庫
- WPF SelectedItemCollection convert to IList and List, such as Datagrid SelectedItems
- WPF datagrid datagridtemplatecolumn DataGridTemplateColumn.CellEditingTemplate DataGridComboBoxColumn
- WPF datagrid scrolldown and change the marked the location in canvasCanvas
- WPF custom control contains datagrid,listbox,imageAI
- MVC + EFCore 專案實戰 - 數倉管理系統7 - 資料來源管理中--新增資料來源MVC
- mysql資料庫新增和修改欄位MySql資料庫
- EMQX Cloud更新:資料整合新增 HStreamDB & TablestoreMQCloud
- laravel 新增一條資料並返回 IDLaravel