麻烦看看这段DataGrid删除代码哪有问题?(很奇怪的问题)
private void dgWZInfoByCode_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
int errCode;
string errStr;
string todelwzid = this.dgWZInfoByCode.DataKeys[e.Item.ItemIndex].ToString().Trim();
//如果换成这行则会出错 string todelwzid = this.dgWZInfoByCode.SelectedItem.Cells[0].Text.Trim();
this.Cwzbase.DeleteMaterial(todelwzid);
this.Cwzbase.GetLastError(out errCode,out errStr);
if (errCode != 0)
{
this.Label1.Text = errStr ;
}
else
{
this.FillWZInfoByCode();
this.Label1.Text = "成功删除物资信息!";
}
}
错误描述:
如果datagrid只有一页,不会出错,如果有两页以上,则删除第一页的记录不会出错,如果是删除第二页以后的,则会删除第一页的相应行记录,比如我删第三页的第一行记录,则实际上是删除了第一页的第一行记录,我进行跟踪,发现取的id值确实是第一页第一行的id,也就是说我的this.Cwzbase.DeleteMaterial(todelwzid);方法没有错误,只是取id的时候没有取得选择的行id
附我的datagrid代码:
<asp:datagrid id="dgWZInfoByCode" runat="server" Width="98%" DataKeyField="WZID" EnableViewState="False" BorderColor="Black" Font-Name="宋体" Font-Size="9pt" HeaderStyle-BackColor="#aaaadd" CellPadding="3" BackColor="White" PageSize="2" AllowPaging="True" AutoGenerateColumns="False" Font-Names="宋体" AlternatingItemStyle-BackColor="#eeeeee" PagerStyle-Mode="NumericPages">
<AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle>
<HeaderStyle BackColor="#AAAADD"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="WZID" HeaderText="物资代码"></asp:BoundColumn>
<asp:BoundColumn DataField="PYCODE" HeaderText="拼音码"></asp:BoundColumn>
<asp:BoundColumn DataField="CSTMCODE" HeaderText="查询码"></asp:BoundColumn>
<asp:BoundColumn DataField="WZNAME" HeaderText="物资名称"></asp:BoundColumn>
<asp:BoundColumn DataField="WZMODEL" HeaderText="规格型号"></asp:BoundColumn>
<asp:BoundColumn DataField="WZUNIT" HeaderText="计量单位"></asp:BoundColumn>
<asp:BoundColumn DataField="WZHIGHLIMIT" HeaderText="库存上限"></asp:BoundColumn>
<asp:BoundColumn DataField="WZLOWLIMIT" HeaderText="库存下限"></asp:BoundColumn>
<asp:BoundColumn DataField="NOTES" HeaderText="备注"></asp:BoundColumn>
<asp:HyperLinkColumn DataNavigateUrlField="WZID" DataNavigateUrlFormatString="JavaScript:window.showModalDialog('wzdtInfo.aspx?WZID={0}',window,'dialogWidth:540px;dialogheight:460px;center:1;scroll:1;help:0;status:0;resizable:no;');" DataTextField="WZID" DataTextFormatString="修改"></asp:HyperLinkColumn>
<asp:ButtonColumn Text="<div id="delete" onclick="javascript:return confirm('你确定要删除这条物资记录吗?')">删除</div> " CommandName="Delete"></asp:ButtonColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:datagrid>
问题点数:50、回复次数:6Top
1 楼superch0054(竹君子)回复于 2003-12-03 19:12:12 得分 0
取得当前的页数n,
删的时候取
n*d+i(d-每页项数)
i--当前页第几项Top
2 楼sjc0(流浪者)回复于 2003-12-03 19:13:19 得分 20
我遇到的问题不知道跟你的有相像之处没有
我的DataGrid中如果有两页,并且第二页只有一行,并且删除这一行试出错!
我的解决方法:在邦定代码前加
if(DataGrid1.CurrentPageIndex > 0)
{
if ( DataGrid1.CurrentPageIndex == DataGrid1.PageCount - 1 && DataGrid1.Items.Count % DataGrid1.PageSize == 1)
{
DataGrid1.CurrentPageIndex = DataGrid1.CurrentPageIndex - 1;
}
}
DataGrid1.DataSource = ddd.GetConInfo(0,1);
DataGrid1.DataBind();Top
3 楼wuyanfeng(耍库)回复于 2003-12-03 19:31:22 得分 30
取得当前的页数n,
删的时候取
n*d+i(d-每页项数)
i--当前页第几项
同时也要用这个方法:
public void DelRowFormDataGrid(DataGrid dg)
{
if((dg.PageCount * dg.PageSize + dg.Items.Count - 1) % dg.PageSize == 0 && dg.CurrentPageIndex >0)//DATAGRID中的总页数乘以分页数加上当前页的总项数减一,再与DATAGRID的分页数求摸。如果等于零表示DATAGRID中的总页数已经减一,如果DATAGRID中当前索引大于零(DATAGRID中的当前索引是丛零开始),则DATAGRID的当前页需要用总页数减一。
{
dg.CurrentPageIndex =dg.PageCount -2;
}
dg.EditItemIndex = -1;//不重新设定编辑项会出现难以发现的错误。
}Top
4 楼wuyanfeng(耍库)回复于 2003-12-03 19:38:15 得分 0
如果数据源存在Session["数据源"]中,那么直接用((DataTable)Session["数据源"]).Rows[e.Item.ItemIndex]["id"].ToString();Top
5 楼longwelkin(birdman)回复于 2003-12-04 11:36:47 得分 0
不行啊!
我怎么也想不明白,怎么会出现这种情况?Top
6 楼longwelkin(birdman)回复于 2003-12-04 12:05:14 得分 0
我把EnableViewState属性改成true就可以了
请问EnableViewState是用来干什么的?Top




