GridView中的数据源是某个目录下的所有文件的路径,GridView绑定代码如下:         string[] groups = Directory.GetFiles(s);  //s为文件路径
         GridView1.DataSource = groups;
        GridView1.DataBind();请问,如何设置DataKeyNames使得我在代码GridView1.DataKeys[e.RowIndex].Values.ToString()中得到相应行的文件路径?

解决方案 »

  1.   

    不一定非用DataKeys
    用这个试试吧
    GridView1.Rows[GridView1.SelectedIndex].Cells[0].Text;
      

  2.   

    奇怪的是GridView1.SelectedIndex得到的都是-1,而我在RowDeleting事件中用e.RowIndex中就会得到相应的行,把你那句改成Response.Write(GridView1.Rows[e.RowIndex].Cells[0].Text.ToString())确什么也得不到..都是空值...
      

  3.   

    第一个用:GridView1.DataKeys[e.RowIndex].Values.ToString()
    第二个用:GridView1.DataKeys[e.RowIndex][1].ToString();
    第三个用:GridView1.DataKeys[e.RowIndex][2].ToString();
    ……
      

  4.   

    这个是你所选行的索引,如果没选,默认是-1,所以超出限制.
    你可以测试一个具体的数字
    GridView1.Rows[0].Cells[0].Text; 这个是可以的.
      

  5.   

    前台html 
    <asp:GridView ID="GridView1" runat="server" DataKeyNames="sDirectoyr"  AutoGenerateColumns="False" OnRowDeleting="GridView1_RowDeleting">
             <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%#Eval("sDirectoyr") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                   <asp:TemplateField>
                    <ItemTemplate>
                        <asp:LinkButton ID="lbEdit" runat="server" CommandName="Delete" Text="编辑"></asp:LinkButton>
                    </ItemTemplate>
                   </asp:TemplateField>
                </Columns>
            </asp:GridView>后台CS代码 protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    string[] group = Directory.GetFiles(@"c:\");
                    DataTable dt = new DataTable();
                    dt.Columns.Add("sDirectoyr");
                    for (int i = 0; i < group.Length; i++)
                    {
                        dt.Rows.Add(group[i])
                    }
                    this.GridView1.DataSource = dt;
                    this.GridView1.DataBind();
                }
            }        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                GridView gv = (GridView)sender;
                Response.Write(gv.DataKeys[e.RowIndex].Value.ToString());
            }