读书人

DATAGRID 自定义控键的分页有关问题

发布时间: 2011-12-21 23:56:01 作者: rapoo

DATAGRID 自定义控键的分页问题
DATAGRID 中我自定义了一个IMAGE的控键,其作用就是判断邮件是否打开过,"是"连接图片1;"否"连接图片2
DATAGRID 不使用分页功能 ,则不回报错.
如果DATAGRID 开启了分页功能,就不能索引DATAGRID的下一页的记录集......
求高手帮忙!!!我等!!!!---------------------------------
:ERROR
----------------------------------
“/Index”应用程序中的服务器错误。
--------------------------------------------

索引超出范围。必须为非负值并小于集合大小。参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index

源错误:


行 96: for(int k=0;k<dt.Tables["fEmail_Table"].Rows.Count;k++)
行 97: {
行 98: img = (System.Web.UI.WebControls.Image)this.dtgnews.Items[k].FindControl("imgzt");
行 99: if(dt.Tables["fEmail_Table"].Rows[k]["fEmail_En"].ToString()=="0")
行 100:{


源文件: c:\inetpub\wwwroot\index\admin\emailshoulist.aspx.cs 行: 98

堆栈跟踪:


[ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index]
System.Collections.ArrayList.get_Item(Int32 index) +91
System.Web.UI.WebControls.DataGridItemCollection.get_Item(Int32 index) +10
Index.Admin.Emailshoulist.DataInfo() in c:\inetpub\wwwroot\index\admin\emailshoulist.aspx.cs:98
Index.Admin.Emailshoulist.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\index\admin\emailshoulist.aspx.cs:38
System.Web.UI.Control.OnLoad(EventArgs e) +67
System.Web.UI.Control.LoadRecursive() +35
System.Web.UI.Page.ProcessRequestMain() +750



----------------------------------------
.CS
----------------------------------------             
string str = "";
str = "SELECT * FROM fEmail_Table ";
DataSet dt = new DataSet();
dt = Info.Select(str,"fEmail_Table");
this.dtgnews.DataSource = dt;
this.dtgnews.DataBind();
if(dt.Tables["fEmail_Table"].Rows.Count>0)
{
if (0==this.dtgnews.CurrentPageIndex)
{
this.lkbtnuppage.Visible = false;
}
else
{
this.lkbtnuppage.Visible = true;
}
if (this.dtgnews.CurrentPageIndex==this.dtgnews.PageCount-1)
{
this.lkbtnNext.Visible = false;
}
else
{
this.lkbtnNext.Visible = true;
}
this.lkbtnabc.Text = (this.dtgnews.CurrentPageIndex+1).ToString();
System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
for(int k=0;k<dt.Tables["fEmail_Table"].Rows.Count;k++)
{

img = (System.Web.UI.WebControls.Image)this.dtgnews.Items[k].FindControl("imgzt");
if(dt.Tables["fEmail_Table"].Rows[k]["fEmail_En"].ToString()=="0")
{
img.ImageUrl = "EmailIma/weidu.bmp";
}
else if(dt.Tables["fEmail_Table"].Rows[k]["fEmail_En"].ToString()=="1")
{
img.ImageUrl = "EmailIma/yidu.bmp";
}

}
}
---------------------------------------
.ASPX
---------------------------------------
<asp:datagrid id="dtgnews" runat="server" Height="100%" Width="570px" PageSize="3" AllowPaging="True"
AutoGenerateColumns="False" CssClass="ListTable" CellPadding="4" BorderColor="#336666" BorderWidth="1px"
BorderStyle="Double" BackColor="White" GridLines="Horizontal">
<FooterStyle ForeColor="#333333" BackColor="White"></FooterStyle>


<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#339966"></SelectedItemStyle>
<ItemStyle HorizontalAlign="Center" ForeColor="#333333" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" ForeColor="White" BackColor="#99CCFF"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False" DataField="fEmail_ID"></asp:BoundColumn>
<asp:TemplateColumn>
<HeaderStyle Width="5%"></HeaderStyle>
<HeaderTemplate>
<asp:CheckBox id="chkallchk" runat="server" AutoPostBack="True"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox id="chk" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="状态">
<HeaderStyle Width="10%"></HeaderStyle>
<ItemTemplate>
<asp:Image id="imgzt" runat="server" ImageUrl="EmailIma/weidu.bmp"></asp:Image>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn DataNavigateUrlField="fEmail_ID" DataNavigateUrlFormatString="EmailLook.aspx?ID={0}"
DataTextField="fEmail_Fajianren" HeaderText="发件人">
<HeaderStyle Width="20%"></HeaderStyle>
</asp:HyperLinkColumn>
<asp:HyperLinkColumn DataNavigateUrlField="fEmail_ID" DataNavigateUrlFormatString="EmailLook.aspx?ID={0}"
DataTextField="fEmail_Zhuti" HeaderText="主题">
<HeaderStyle Width="40%"></HeaderStyle>
</asp:HyperLinkColumn>
<asp:BoundColumn DataField="fEmail_DateTime" HeaderText="收件时间">
<HeaderStyle Width="25%"></HeaderStyle>
</asp:BoundColumn>
</Columns>
<PagerStyle Visible="False" NextPageText="" PrevPageText="" HorizontalAlign="Center" ForeColor="White"
BackColor="#336666" Mode="NumericPages"></PagerStyle>
</asp:datagrid>

[解决办法]
int i = -1;//页号
int n;//每页行数
行 96: for(int k=0;k <dt.Tables["fEmail_Table"].Rows.Count;k++)
行 97: {
if(k%n == 0)
i++;//第i页
this.dtgnews.CurrentPageIndex = i;
行 98: img = (System.Web.UI.WebControls.Image)this.dtgnews.Items[k%n].FindControl("imgzt");
行 99: if(dt.Tables["fEmail_Table"].Rows[k]["fEmail_En"].ToString()=="0")
行 100: {
没有经过验证,楼主试试吧
[解决办法]
aspx:
<asp:datagrid id="dtgnews" runat="server" Height="100%" Width="570px" PageSize="3" AllowPaging="True"
AutoGenerateColumns="False" CssClass="ListTable" CellPadding="4" BorderColor="#336666" BorderWidth="1px"
BorderStyle="Double" BackColor="White" GridLines="Horizontal" OnItemDataBound="dtgnews_ItemDataBound">
CS:
protected void Page_Load(object sender, EventArgs e)
{


if (!IsPostBack)
{
string str = "";
str = "SELECT * FROM fEmail_Table ";
DataSet dt = new DataSet();
dt = Info.Select(str,"fEmail_Table");
this.dtgnews.DataSource = dt.Tables["fEmail_Table"];
this.dtgnews.DataBind();
}
}
protected void dtgnews_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemIndex >= 0 && e.Item.ItemIndex != -1)
{
System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)e.Item.FindControl("imgzt");
string femen = (DataBinder.Eval(e.Item.DataItem, "fEmail_En")).ToString();
if(femen=="0")
{
img.ImageUrl = "EmailIma/weidu.bmp";
}
else if(femen=="1")
{
img.ImageUrl = "EmailIma/yidu.bmp";
}
}
}

读书人网 >C#

热点推荐