我可以';在网格视图中找不到行';s RowDataBound,给出异常“”;索引超出范围.必须是非负数并且
本文关键字:范围 索引 是非 视图 网格 找不到 我可以 RowDataBound 异常 | 更新日期: 2023-09-27 17:58:35
我正在使用gridview
,我想将特定行的颜色更改为网格视图,这就是为什么我必须在rowdatabound事件中找到行。我怎么找到那排?
源代码:
protected void Page_Load(object sender, EventArgs e)
{
string[] arr={"1","2","3","4"};
GridView1.DataSource = arr;
GridView1.DataBind();
}
protected void pagechangin(object sender, GridViewPageEventArgs e) {
GridView1.PageIndex = e.NewPageIndex;
}
protected void databound(Object sender, GridViewRowEventArgs e) {
GridViewRow grv=GridView1.Rows[0];
}
必须注册事件处理程序才能处理事件。但是您还没有向我们展示aspx标记,所以您可能错过了以声明方式添加处理程序:
<asp:gridview id="GridView1"
onrowdatabound="GridView1_RowDataBound"
runat="server">
</asp:gridview>
void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
// e.Row is the GridViewRow
e.Row.BackColor = System.Drawing.Color.Green;
}
}
更新IndexOutOfRangeException
的原因是您在创建第一行之前正在访问它:
GridViewRow grv=GridView1.Rows[0];
这是一个令人讨厌的问题。对每个GridViewRow
调用RowDataBound
,不仅对DataItems
调用,而且对Header
、Footer
和Pager
调用。将要创建的第一个是Header
。但是GridView.Rows
只返回GridViewRows
,RowType
=DataRow
。因此,您正试图在创建header
行的过程中访问第一个"数据行"。
要修复它,请使用上面的代码并检查RowType
。
if(e.Row.RowType == DataControlRowType.DataRow)
{
// now you ca safely access the first row in this way,
// altghough i assume that you should use my code above
// to set the color of every GridViewRow
GridViewRow grv=GridView1.Rows[0];
除此之外,如果您使用ViewState
(默认值),您还应该使用仅网格if(!IsPostBack)
的DataBind
。
page_load事件处理程序不正确。Yoou不应该在每次页面加载时都加载数据,而应该只在初始页面加载。也许这造成了问题。
在您的Page_Load方法中尝试此操作
if (!Page.IsPostback)
{
//copy your code from above
}