【发布时间】:2011-06-30 20:23:51
【问题描述】:
请考虑我在调试模式下获得的 cmets 中的值:
protected void FilesGrid_SelectedIndexChanged(object sender, EventArgs e)
{
int selected = FilesGrid.SelectedIndex; // selected = 2
FilesGrid.DataBind(); //added after feedback in comments. it makes no change
int count = FilesGrid.Rows.Count; // count = 0
GridViewRow row = FilesGrid.Rows[selected]; // row = null
GridViewRow row0 = FilesGrid.Rows[0]; // row = null
}
我在调查为什么 SelectedValue 在此事件处理程序中给出 null 时遇到此代码(肯定设置了 DataKeyNames 参数)。
谁能解释一下这是怎么可能的?
提前谢谢你。
PS。 这是我的aspx代码:
<asp:GridView ID="FilesGrid" runat="server" AutoGenerateColumns="False"
AutoGenerateSelectButton="True"
onselectedindexchanged="FilesGrid_SelectedIndexChanged"
style="margin-top: 0px" >
<Columns>
<asp:CommandField ShowDeleteButton="True" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Length" DataFormatString="{0:N0}"
HeaderText="Size in Bytes" HtmlEncode="False" />
</Columns>
</asp:GridView>
我是这样绑定数据的:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string [] dd = {"FullName"};
FilesGrid.DataKeyNames = dd;
string appPath = Request.PhysicalApplicationPath;
DirectoryInfo dirInfo = new DirectoryInfo(appPath);
FileInfo[] files = dirInfo.GetFiles();
FilesGrid.DataSource = files;
FilesGrid.DataBind(); }
}
【问题讨论】:
-
gridview1.rows[index] 返回什么?因为看起来您正在拉取项目的 SelectedIndex 并尝试将其用作行索引。我的猜测是您需要找到 SelectedItem 所在的行,并将 GridViewRow row = 分配给它。
-
您是否尝试过将数据重新绑定到您的网格视图?可能会丢失所有物品。
-
@Kirill:您应该提供更多信息。向我们展示 GridView ASPX 标记和数据绑定网格的代码隐藏(Page_Load?)。
-
@Kirill:我在示例应用程序中添加了一个页面并对其进行了测试。我无法重现错误。
-
@naveen:非常感谢,这让我确信这是一个本地错误,我再也不会遇到了 :)
标签: c# asp.net gridview selectedvalue selectedindexchanged