DataGrid的简单问题

ljfppp 2002-11-17 09:29:19
在编辑列中点击"编辑"后,再点击“更新”,发现CommandName是“Cancel”,怎么弄阿?
...全文
25 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zag 2002-11-18
  • 打赏
  • 举报
回复
把代码贴出来看看吧,这样说不明白的,大伙都在瞎猜.
ljfppp 2002-11-18
  • 打赏
  • 举报
回复
知道原因了,我原来的数据列是动态生成的,所以就这样.我有两个命令列,一个是编辑,一个是删除,如果把两个命令列的位置倒置,前面我提到的CommandName都变成"Delete"了,如果让数据列自动生成的话,CommandName就正常了,不过这时"删除""编辑"列就在DataGrid列的0和1位置了,外观不好,有什么办法可以解决阿?还有,如果是将编辑列和删除列也动态生成的话,DataGrid根本就接收不到这两个列的触发事件,呵呵,高手指教
//------------------------------添加删除命令---------------------------
private void AddDelColumn()
{
delCol=new ButtonColumn();
delCol.Text="删除";
delCol.CommandName="Delete";

this.PGrid.Columns.Add(delCol);
}


//----------------------------添加编辑列-------------------------------
private void AddEidtColumn()
{
editCol=new EditCommandColumn();
editCol.EditText="编辑";
editCol.CancelText="取消";
editCol.UpdateText="确定";
this.PGrid.Columns.Add(editCol);
}
//------------------------------增加文本列------------------------------
private void AddTextColumn(string bindField,int iSite)
{
boundCol=new BoundColumn();

boundCol.DataField=bindField;
boundCol.HeaderText=bindField;

this.PGrid.Columns.Add(boundCol);

}

//------------------------------删除行-----------------------------------
private void DeleteCommand(object send, DataGridCommandEventArgs e)
{
if(DT_Sor==null)
return;
int iIndex=GetIndex(e);
if(iIndex<0)
return;

for(int i=0;i<=iIndex;i++)
{
if(DT_Sor.Rows[i].RowState==DataRowState.Deleted)
iIndex++;
}
DT_Sor.Rows[iIndex].Delete();
if(e.Item.ItemIndex==0 && this.PGrid.PageCount>1 && this.PGrid.CurrentPageIndex>0 && this.PGrid.Items.Count==1)
this.PGrid.CurrentPageIndex -= 1;
UpdateView();
}



//------------------------------编辑行-----------------------------------
private void EditCommand(object send, DataGridCommandEventArgs e)
{
this.PGrid.EditItemIndex=e.Item.ItemIndex;
UpdateView();

}


//-----------------------------返回表-----------------------------------
private DataTable GetTable()
{
if(HttpContext.Current==null || HttpContext.Current.Session[this.TB_ID.Text]==null)
return null;
else
return (DataTable)HttpContext.Current.Session[this.TB_ID.Text];
}



//------------------------------更新行-----------------------------------
private void UpdateCommand(object send, DataGridCommandEventArgs e)
{
if(DT_Sor==null)
return;

int iIndex=GetIndex(e);
if(iIndex<0)
return;

for(int i=0;i<=iIndex;i++)
{
if(DT_Sor.Rows[i].RowState==DataRowState.Deleted)
iIndex++;
}

for(int i=0;i<DT_Sor.Columns.Count;i++)
{
try
{
DT_Sor.Rows[iIndex][i]=((TextBox)e.Item.Cells[i+2].Controls[0]).Text;
}
catch(Exception exp)
{
string err=exp.Message;
HttpContext.Current.Response.Write("<SCRIPT>alert('第" +(i+1).ToString() + "格填写错误!');</SCRIPT>");
this.UpdateView();
return;
}
}

HttpContext.Current.Session[this.TB_ID.Text]=DT_Sor;
this.PGrid.EditItemIndex=-1;

UpdateView();
}



//-----------------------------取消编辑----------------------------------
private void CancelCommand(object send, DataGridCommandEventArgs e)
{
if(DT_Sor==null)
return;

int iIndex=GetIndex(e);
//如果该行是新加的,则删除之
if(DT_Sor.Rows[iIndex].RowState==DataRowState.Added)
{
DT_Sor.Rows.RemoveAt(iIndex);

if(e.Item.ItemIndex==0 && this.PGrid.CurrentPageIndex>0)
this.PGrid.CurrentPageIndex -=1;
}
else
{
DT_Sor.Rows[iIndex].RejectChanges();
}
this.PGrid.EditItemIndex=-1;
UpdateView();
}



//----------------------------得到行的索引-------------------------------
private int GetIndex(DataGridCommandEventArgs e)
{
if(DT_Sor==null)
return -1;
int iIndex = this.PGrid.CurrentPageIndex * this.PGrid.PageSize + e.Item.ItemIndex;
if(iIndex>=0 && iIndex<=DT_Sor.Rows.Count)
return iIndex;
else
return -1;
}



//-----------------------------更新绑定----------------------------------
private void UpdateView()
{

if(DT_Sor==null)
return;

//int i;
//生成列
//for(i=0;i<DT_Sor.Columns.Count;i++)
//{
// AddTextColumn(DT_Sor.Columns[i].ColumnName,i);
//}

//this.AddDelColumn();
//this.AddEidtColumn();

this.PGrid.DataSource=DT_Sor.DefaultView;
this.PGrid.DataBind();
}



//----------------------------DataGrid行的生成---------------------------
private void ItemCreate(object sender,DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Footer)
{
//如果不是再最后一页,将添加按钮隐藏
int i;
int iCount=e.Item.Cells.Count;
e.Item.Cells.RemoveAt(0);
e.Item.Cells.RemoveAt(0);
for(i=0;i<iCount-3;i++)
e.Item.Cells.RemoveAt(1);

e.Item.Cells[0].ColumnSpan=iCount;

}
else if(e.Item.ItemType!=ListItemType.Pager)
{
e.Item.Cells.RemoveAt(2);
e.Item.Cells[1].ColumnSpan=2;
}
}



//-----------------------------添加新行----------------------------------
public void AddNewRow(object sender,System.EventArgs e)
{
if(DT_Sor==null)
return;
DataRow row=DT_Sor.NewRow();

for(int i=0;i<DT_Sor.Columns.Count;i++)
row[i]="";
DT_Sor.Rows.Add(row);

int iNewItemIndex;
int iRowCount=0;
//得到当前的编辑索引
for(int i=0;i<DT_Sor.Rows.Count;i++)
{
if(DT_Sor.Rows[i].RowState!=DataRowState.Deleted)
iRowCount++;
}

iNewItemIndex=iRowCount%this.PGrid.PageSize;

if(iNewItemIndex>0)
{
this.PGrid.CurrentPageIndex=this.PGrid.PageCount-1;
iNewItemIndex -=1;
}
else if(iRowCount>=this.PGrid.PageSize)
{
this.PGrid.CurrentPageIndex=this.PGrid.PageCount;
iNewItemIndex=(this.PGrid.PageSize-1);
}
this.PGrid.EditItemIndex=iNewItemIndex;
UpdateView();
}



//-----------------------------选页改变----------------------------------
private void PageIndexChanged(object sender,DataGridPageChangedEventArgs e)
{
if(DT_Sor==null)
return;
this.PGrid.CurrentPageIndex=e.NewPageIndex;

UpdateView();
}


//-----------------------------------------------------------------------
private void ItemCommand(object sender,DataGridCommandEventArgs e)
{
}
UpdateView()方法注释掉的几行就是病根,
这个DataGrid是在用户控件里使用的,谢谢
buaawjh 2002-11-17
  • 打赏
  • 举报
回复
你查一下页面代码,我觉得你应该能看出来哪里要改的
sunny6281 2002-11-17
  • 打赏
  • 举报
回复
建议用模板列,自己定义CommandName,这样自己心里清楚一些:)
icyer 2002-11-17
  • 打赏
  • 举报
回复
把.aspx里定义DataGrid的代码贴出来看看。
ljfppp 2002-11-17
  • 打赏
  • 举报
回复
不是,而起不管点什么按钮,CommandName都是“Cancel”
icyer 2002-11-17
  • 打赏
  • 举报
回复
是不是把"更新"和"取消"的文字搞错了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧