asp.net C#中的网格视图使用问题
本文关键字:视图 问题 网格 net asp | 更新日期: 2023-09-27 17:59:12
我想用一个HyperLink
和另外两个字段填充GridView
。
我三心二意地尝试了下面的方法。它给出了错误。
SqlCommand comm = new SqlCommand(
@"Select
FileUpload.FileName AS FileName,
FileUpload.FilePath AS PATH,
SubjectMaster.SubjectName AS Subject,
MemberPersonalInformation.FirstName As SharedBy
from FileUpload
INNER JOIN ContentManagement
ON ContentManagement.FileId=FileUpload.FileId
INNER JOIN MemberPersonalInformation
ON MemberPersonalInformation.MemberId=ContentManagement.CreatedBy
INNER JOIN SubjectMaster
ON ContentManagement.SubjectName=SubjectMaster.SubjectId
where
FileUpload.FileId in
(
Select FileId
from ContentManagement
where
ContentId in
(
Select ContentId
from ContentToIndividual
where ShowToMemberId=@MemberId
) and
ContentManagement.ContentTypeId=@TPD and
ContentManagement.SessionId=@SessionId
)", conn);
conn.Open();
SqlDataReader rdr = comm.ExecuteReader();
int i = 0;
while (rdr.Read())
{
string fip = rdr["PATH"].ToString();
GridViewRow di = GridView1.Rows[i];
HyperLink h1 = (HyperLink)di.FindControl("Hyperlink1");
h1.Text = rdr["FileName"].ToString();
h1.NavigateUrl = "download.aspx?filepath=" + fip;
di.Cells[1].Text = rdr["SharedBy"].ToString();
di.Cells[2].Text = rdr["Subject"].ToString();
i++;
}
rdr.Close();
正在获取错误消息
索引超出范围。必须是非阴性且小于收藏
参数名称:索引
如果有人建议我一个更好的方法来做这件事或纠正这个错误,请。
确保您的网格视图至少有三个列,否则这一行将抛出您描述的异常:
di.Cells[2].Text = rdr["SharedBy"].ToString();
另一方面,你需要小心这一行:
h1.NavigateUrl = "download.aspx?filepath=" + fip;
将路径传递到客户端,然后再传递回服务器是引入安全问题的好方法,请确保download.aspx检查filepath参数是否指向真正应该下载的文件!!:)
GridView.Rows
集合索引是基于零的。您需要使用零初始化i
。
当i
变量的值超过GridView.Rows
集合中的可用索引时,会发生错误。因此,如果用zero初始化i
变量并不能解决问题,那么返回的结果集(由读取器读取)比GridView.Rows
集合包含更多的项。
要确保i
变量的值不超过GridView.Rows
集合的可用索引,请使用以下内容:
while (rdr.Read() && i < gridView.Rows.Count)
如果您需要在GridView
中添加行,则使用以下方法:
while (rdr.Read() && i < 3)
{
string fip = rdr["PATH"].ToString();
GridViewRow di = new GridViewRow();
....
gridView.Rows.Add(di);
i++;
}
另一个原因可能是用于引用GridViewRow.Cells
中的项的索引。
设置int i=0;和检查,索引从0开始,而不是从1 开始
我认为您的阅读器集合计数与网格行计数的大小不匹配,这就是为什么它给出"索引超出范围"的原因检查
if(GridView1.Rows.Count > i)
然后执行您想要的