日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对于DataSet中的问题真是郁闷啊

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对于DataSet中的问题真是郁闷啊 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我將一個DataSet放到一個Session中,將Session中的一個表綁定到一個DataGrid中,在DataGrid中我加入了模板列。
DataSet表的示例:
字段1字段2字段3刪除標記
ID1姓名1地址1已經刪除
ID2姓名2地址2
ID3姓名3地址3
當用戶通過DataGrid模板列刪除第一條記錄后,此時數據并未保存到數據庫中,只是在第一條記錄中做了一個刪除標記。但在DataGrid中用戶看到的第一條記錄已經沒有了,模板列綁定的第一條記錄實際上是DataSet中的第二條記錄,當用戶再次執行刪除DataGrid中的第一條記錄時,通過參數獲得的仍然是已經刪除的第一條記錄的rownumber,所以執行后不會在DataGrid中刪除。

具體代碼如下:
namespace?Human.WebUI.Persons.modules
{
????
using?System;
????
using?System.Data;
????
using?System.Drawing;
????
using?System.Web;
????
using?System.Web.UI;
????
using?System.Web.UI.WebControls;
????
using?System.Web.UI.HtmlControls;

????
using?Human.Common.Data;

????
/**////?<summary>
????
///????????ExperienceListModule?的摘要說明。
????
///?</summary>

????public?class?ExperienceListModule?:?ModuleBase
????
{
????????
protected?System.Web.UI.WebControls.DataGrid?ExperienceDataGrid;

????????
private?void?Page_Load(object?sender,?System.EventArgs?e)
????????
{
????????????InitializeDataGrid();
????????????ExperienceDataGrid.DataSource
=Person.Tables[PersonData.EXPERIENCE_ITEM_TABLE].DefaultView;
????????????ExperienceDataGrid.DataBind();
????????}


????????
private?void?InitializeDataGrid()
????????
{
????????????ExperienceDataGrid.AutoGenerateColumns
=false;

????????????TemplateColumn?tcStartYear
=new?TemplateColumn();
????????????tcStartYear.HeaderTemplate
=new?DataGridTempleteColumn(ListItemType.Header,"開始時間");
????????????tcStartYear.ItemTemplate
=new?DataGridTempleteColumn(ListItemType.Item,"StartYear");
????????????ExperienceDataGrid.Columns.Add(tcStartYear);

????????????TemplateColumn?tcEndYear
=new?TemplateColumn();
????????????tcEndYear.HeaderTemplate
=new?DataGridTempleteColumn(ListItemType.Header,"結束時間");
????????????tcEndYear.ItemTemplate
=new?DataGridTempleteColumn(ListItemType.Item,"EndYear");
????????????ExperienceDataGrid.Columns.Add(tcEndYear);

????????????BoundColumn?CorporationCol
=new?BoundColumn();
????????????CorporationCol.HeaderText
="單位名稱";
????????????CorporationCol.DataField
=PersonData.EXPERIENCE_CORPORATION_FIELD;
????????????ExperienceDataGrid.Columns.Add(CorporationCol);

????????????BoundColumn?DepartmentCol
=new?BoundColumn();
????????????DepartmentCol.HeaderText
="部門名稱";
????????????DepartmentCol.DataField
=PersonData.EXPERIENCE_DEPARTMENT_FIELD;
????????????ExperienceDataGrid.Columns.Add(DepartmentCol);

????????????TemplateColumn?tcEdit
=new?TemplateColumn();
????????????tcEdit.HeaderTemplate
=new?DataGridTempleteColumn(ListItemType.Header,"修改");
????????????tcEdit.ItemTemplate
=new?DataGridTempleteColumn(ListItemType.Item,"Edit");
????????????
????????????ExperienceDataGrid.Columns.Add(tcEdit);

????????????ButtonColumn?tcDelete
=new?ButtonColumn();
????????????tcDelete.Text
="刪除";
????????????tcDelete.ButtonType
=ButtonColumnType.LinkButton;
????????????tcDelete.HeaderText
="刪除";
????????????tcDelete.CommandName
="Delete";
????????????ExperienceDataGrid.Columns.Add(tcDelete);

????????}

????????

????????
Web?窗體設計器生成的代碼#region?Web?窗體設計器生成的代碼
????????
override?protected?void?OnInit(EventArgs?e)
????????
{
????????????
//
????????????
//?CODEGEN:?該調用是?ASP.NET?Web?窗體設計器所必需的。
????????????
//
????????????InitializeComponent();
????????????
base.OnInit(e);
????????}

????????
????????
/**////?<summary>
????????
///????????設計器支持所需的方法?-?不要使用代碼編輯器
????????
///????????修改此方法的內容。
????????
///?</summary>

????????private?void?InitializeComponent()
????????
{
????????????
this.ExperienceDataGrid.DeleteCommand?+=?new?System.Web.UI.WebControls.DataGridCommandEventHandler(this.ExperienceDataGrid_DeleteCommand);
????????????
this.ExperienceDataGrid.ItemDataBound?+=?new?System.Web.UI.WebControls.DataGridItemEventHandler(this.ExperienceDataGrid_ItemDataBound);
????????????
this.ExperienceDataGrid.SelectedIndexChanged?+=?new?System.EventHandler(this.ExperienceDataGrid_SelectedIndexChanged);
????????????
this.Load?+=?new?System.EventHandler(this.Page_Load);

????????}

????????
#endregion


????????
private?void?ExperienceDataGrid_DeleteCommand(object?source,?System.Web.UI.WebControls.DataGridCommandEventArgs?e)
????????
{
????????????
if?(((LinkButton)e.CommandSource).CommandName?==?"Delete")
????????????
{
????????????????
try
????????????????
{
????????????????????DataTable?ExperienceTable
=Person.Tables[PersonData.EXPERIENCE_ITEM_TABLE];
????????????????????
DataRow?row=ExperienceTable.Rows[e.Item.ItemIndex];
????????????????????row.Delete();

????????????????}

????????????????
catch(Exception?ex)
????????????????
{
????????????????????
string?s=ex.Message.ToString();
????????????????}

????????????}

????????}


????????
private?void?ExperienceDataGrid_SelectedIndexChanged(object?sender,?System.EventArgs?e)
????????
{
????????
????????}


????????
private?void?ExperienceDataGrid_ItemDataBound(object?sender,?System.Web.UI.WebControls.DataGridItemEventArgs?e)
????????
{
????????????
if((e.Item.ItemType!=?ListItemType.Header)?&?(?e.Item.ItemType?!=?ListItemType.Footer))
????????????
{
????????????????LinkButton?oDeleteButton??
=?(LinkButton)e.Item.Cells[5].Controls[0];

????????????????oDeleteButton.Attributes.Add(
"onclick","Javascript:return?confirm('您是否確認要刪除此記錄?');");
????????????}

????????}


????}

????
class?DataGridTempleteColumn:ITemplate
????
{
????????ListItemType?templateType;
????????
string?columnName;
???
????????
public?DataGridTempleteColumn(ListItemType?type,?string?colname)
????????
{
????????????templateType?
=?type;
????????????columnName?
=?colname;
????????}


????????
public?void?InstantiateIn(System.Web.UI.Control?container)
????????
{
????????????Literal?lc?
=?new?Literal();
????????????
switch(templateType)
????????????
{
????????????????
case?ListItemType.Header:
????????????????????lc.Text?
=?columnName;
????????????????????container.Controls.Add(lc);
????????????????????
break;
????????????????
case?ListItemType.Item:
????????????????????lc.DataBinding
+=new?EventHandler(TemplateControl_DataBinding);
????????????????????container.Controls.Add(lc);
????????????????????
break;
????????????????
case?ListItemType.EditItem:
????????????????????TextBox?tb?
=?new?TextBox();
????????????????????tb.Text?
=?"";
????????????????????container.Controls.Add(tb);
????????????????????
break;
????????????????
case?ListItemType.Footer:
????????????????????lc.Text?
=?"<I>"?+?columnName?+?"</I>";
????????????????????container.Controls.Add(lc);
????????????????????
break;
????????????}

????????}

????
????????
private?void?TemplateControl_DataBinding(object?sender,
????????????System.EventArgs?e)
????????
{
????????????Literal?lc;
????????????lc?
=?(Literal)?sender;
????????????DataGridItem?container
=(DataGridItem)lc.NamingContainer;
????????????
if(columnName=="StartYear")
????????????
{
????????????????lc.Text
+=DataBinder.Eval(container.DataItem,?"StartYear");
????????????????lc.Text
+="";
????????????????lc.Text
+=DataBinder.Eval(container.DataItem,?"StartMonth");
????????????????lc.Text
+="";
????????????}

????????????
if(columnName=="EndYear")
????????????
{
????????????????
if(Convert.ToString(DataBinder.Eval(container.DataItem,?"EndYear"))!="")
????????????????
{
????????????????????lc.Text
+=DataBinder.Eval(container.DataItem,?"EndYear");
????????????????????lc.Text
+="";
????????????????????lc.Text
+=DataBinder.Eval(container.DataItem,?"EndMonth");
????????????????????lc.Text
+="";
????????????????}

????????????????
else
????????????????
{
????????????????????lc.Text
+="至今";
????????????????}

????????????}


????????????
if(columnName=="Edit")
????????????
{
????????????????lc.Text
+="<a?href=#?οnclick='EditExperience("+container.DataSetIndex+")'>修改</a>";
????????????}


????????}

????}

}


問題終于解決了,由于我是使用Row.Delete()函數,數據并未從數據集中刪除,只是做了一個刪除標記,所以在提取數據時,需要計算DataGrid中要刪除行中數據在DataSet中具體是對應的那條。函數如下:

??private?int?GetFactRowItem(DataTable?table,int?ItemIndex)
??
{
???
int?FactRowItem=0;
???
int?UnDeleteRowCount=-1;
???
while(UnDeleteRowCount<ItemIndex)
???
{
????
if(table.Rows[FactRowItem].RowState==DataRowState.Deleted)
????
{
?????FactRowItem
++;
????}

????
else
????
{
?????FactRowItem
++;
?????UnDeleteRowCount
++;
????}

???}

???
return?FactRowItem-1;
??}
?

轉載于:https://www.cnblogs.com/landina/archive/2005/12/24/304064.html

總結

以上是生活随笔為你收集整理的对于DataSet中的问题真是郁闷啊的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。