我用GridView绑定数据
 public void BindToDept()
    {
        department dept = new department();
        this.Gdept.DataSource = dept.GetAlldepartment();
        this.Gdept.DataKeyNames = new string[]{ "DepartmentId" };
        this.Gdept.DataBind();
    }然后我想获取所选定行内容的ID主键或是内容的相关信息,我的代码是
string id = Gdept.DataKeys[Gdept.SelectedIndex].Value.ToString();
为什么提示我出错误:索引超出范围。有知道的朋友吗,指点一二,哪错了?还是有更好的方法来实现,请详细说明,谢谢。

解决方案 »

  1.   

    Gdept.SelectedIndex 为多少?是不是-1?
      

  2.   

    比如加一行。            <asp:ButtonField CommandName="select"    ButtonType="button"  Text="选择"/>
      

  3.   

    我有啊<asp:LinkButton ID="LinkButton1" runat="server" CommandName="dept">
                                        <font style="FONT-SIZE: 12px" color="Black">
    <%# DataBinder.Eval(Container.DataItem, "DepartmentName")%>
    </font></asp:LinkButton>
      

  4.   

    CommandName="dept" ==>CommandName="select"
      

  5.   

    是不是我把string id = Gdept.DataKeys[Gdept.SelectedIndex].Value.ToString();
    这个代码的事件写错了呢?
    我写的是 protected void Gdept_RowCommand(object sender, GridViewCommandEventArgs e)
      

  6.   

    我把CommandName="dept" 改成CommandName="select" 了,可还是提示错误:超出索引范围。
    急,请指教
      

  7.   

    写在GridView1_SelectedIndexChanging事件中。
      

  8.   

    <asp:GridView ID="Gdept" runat="server" Width="182px" AutoGenerateColumns="False" DataKeyNames="DepartmentId" OnSelectedIndexChanged="Gdept_SelectedIndexChanged">
                            <Columns>
                                <asp:TemplateField>
                                    <ItemTemplate>
                                    
                                        <asp:LinkButton ID="LinkButton1" runat="server" CommandName="select">
                                        
    <%# DataBinder.Eval(Container.DataItem, "DepartmentName")%>
    </asp:LinkButton>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:BoundField DataField="DepartmentId" />
                                <asp:ButtonField Text="选择" CommandName="select" />
                            </Columns>
                        </asp:GridView>
    cs.
    protected void Gdept_SelectedIndexChanged(object sender, EventArgs e)
        {
                string id = Gdept.DataKeys[Gdept.SelectedIndex].Value.ToString();            Response.Redirect("testaddpersons.aspx?id=" + id);
    }
    可是代码跟本不走Gdept_SelectedIndexChanged这个事件啊运行提示:未找到有效资源
      

  9.   

    楼上说的很清楚了,写在Gdept_SelectedIndexChanging事件中
      

  10.   

    up
    到处都见的到cpp2017(慕白兄)
      

  11.   

    可是我写到了写在Gdept_SelectedIndexChanging事件中后,Gdept.SelectedIndex还是-1,仍然提示索引超出范围刚才没看清楚
      

  12.   

    sorry,还是应该写在
    GridView1_SelectedIndexChanged中
      

  13.   

    Gdept_SelectedIndexChanging此时还没有改变index
      

  14.   

    “/Web”应用程序中的服务器错误。
    --------------------------------------------------------------------------------无法找到资源。 
    说明: HTTP 404。您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
    写在GridView1_SelectedIndexChanged中 出现上面的错误
      

  15.   

    原始的SelectedIndex设置的是-1,