请教如何实现选中GridView的一行并且获取这一行的数据,我需要点击一行时候可以获取其中的各个字段的数据?请问asp.net中如何实现,在线等,各位大虾帮帮忙

解决方案 »

  1.   

    可以设置girdview的data key name来,然后在row_selecting事件中获取该值,进行查询
      

  2.   

    借助於 GridView 控制项的 HyperLinkField 资料行,我们便可以在 GridView 控制项中替每一笔资料列显示出一个超连结,并让使用者轻易重新导向至特定的目标位置(特定网页或网页中的位置)。
    在使用 HyperLinkField 资料行时,首先要考虑的就是超连结上的文字。关於此点,可分为下列两种状况来说明:
    q 如果您希望每一笔资料列的超连结都显示相同的固定文字,请将 HyperLinkField 资料行的 Text 属性设定成所需的文字。图表 1 所示者即是一例。
    图表1
    q 如果您希望使用栏位的内容作为每一笔资料列之超连结的文字,请将 HyperLinkField 资料行的 DataTextField 属性设定成该栏位。图表 2 所示者即是一例。当然,最常与 DataTextField 属性搭配使用的不外乎就是 DataTextFormatString 属性。我们经常使用 DataTextFormatString 属性来格式化取自 DataTextField 属性所指定之栏位的资料值。图表 3 所示者即是一例。
    图表2
    图表3
    学会如何设定 HyperLinkField 资料行所产生之超连结的文字之後,接下来就是学习设定超连结的目标 URL。如果您要让所有的超连结都连结至相同的URL,请直接将 NavigateUrl 属性设定成所需的 URL。这样的设定虽然最为单纯,但是却也非常不切实际,毕竟就算是连结至相同的网页,也会每一笔资料列连结至相同网页中的不同位置(也就是书 - BookMark)。因此,较为实用的应该是 DataNavigateUrlFields 属性,原因很简单,它允许您指定某一个栏位中的URL作为连结的目的地(请注意此属性的名称是以s结尾,这是有玄机的,稍後会加以说明)。以图表4所示者而言,表示以「网址」栏位中的 URL 作为连结的目的地,如此一来,不同的超连结将会拥有各自的 URL。
    图表4
    当然,谈到了 DataNavigateUrlFields 属性,绝对不能忘了它的好兄弟 - DataNavigateUrlFormatString 属性。DataNavigateUrlFormatString 属性最主要的用途是用来格式化超连结的URL。举例来说,假设您指派给 DataNavigateUrlFields 属性的栏位并非内含完整的 URL(例如:http://www.gotop.com.tw)而仅仅是内含网页档的名称(例如:AlexPage.aspx),此时如果希望超连结的 URL 能够在网页档的名称前加上完整的位置路径的话,您可以采用以下的写法:
    <asp:HyperLinkField DataNavigateUrlFields="个人网页"
    DataNavigateUrlFormatString="~/Members/{0}"
    HeaderText="个人网页" Text="检视个人网页" />
    以上面的写法而言,表示以连结至根目录下之 Members 资料夹中的网页档。又以下面的写法而言,则表示连结至一个绝对URL(也就是某网站)中之 Members 资料夹中的网页档:
    <asp:HyperLinkField
    DataNavigateUrlFields="个人网页" 
    DataNavigateUrlFormatString="http://www.alexmember.com/Members/{0}" 
    HeaderText="个人网页" Text="检视个人网页" />
    谈到这里,相信大家对 HyperLinkField 资料行都已经能够运用自如,现在呢,我们要再回头研究研究 DataNavigateUrlFields 属性,为什麽它的名称要特别以s结尾呢?原因很简单,因为您可以指派一个以上的栏位名称给 DataNavigateUrlFields 属性。什麽时候需要这样做呢?举例来说,当每一个超连结的 URL 都是要连结至相同的网页但是却要传递查询字串给该网页(类似如下所示),以便让目标网页根据不同的参数值来进行不同的处理时,就有需要这样做:
    MemberPage.aspx?Name=章立民&MemberLevel=A
    欲使您的超连结拥有类似如上的URL,就必须借助於 DataNavigateUrlFields 属性来构建之。这个时候,您必须将 Name 与 MemberLevel 栏位同时指派给 DataNavigateUrlFields 属性(Name 与 MemberLevel 栏位必须以逗号分隔),并利用 DataNavigateUrlFormatString 属性来加以格式化即可。写法如下所示:
    <asp:HyperLinkField
    DataNavigateUrlFields="Name, MemberLevel" 
    DataNavigateUrlFormatString="MemberPage.aspx?Name={0}&MemberLevel={1}" 
    HeaderText="会员网页" Text="检视会员网页" />
      

  3.   

    其实是可以实现一个欠套的,先设置GirdView的DataKeyNames可以是你记录的id,然后在SelectedIndexChange事件中获取该值,进行查询。
    获取如:GridView1.DataKeys[e.Row.RowIndex].Value获得id,然后写sql语句,跟其他查询一样!
      

  4.   

    如果只是单击而言必然要用JS,把主键绑到一个控件上,单击事件中取到其值,将其值传一个隐藏域,要是服务器端的,再调用一个C#中一个PUBLIC的函数,就OK了,如果有问题QQ120547173
      

  5.   

    有个选择行的事件
    可以通过它来解决
    selectXXXXindex
      

  6.   

    前台代码:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridView1" runat="server" OnSelectedIndexChanging="GridView1_SelectedIndexChanging">
            <Columns>
            <asp:BoundField HeaderText="id" DataField="id" />
            <asp:CommandField ButtonType="button" ShowSelectButton="true" />
            </Columns>
            </asp:GridView>
        
        </div>
        </form>
    </body>
    </html>
    后台代码:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class Default2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }
        protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            GridView1.Rows[e.NewSelectedIndex].Cells[0].text;//此为你要得到的选中行的第一列的数据
        }
    }
    希望对你有些帮助
      

  7.   

     protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) 
        { 
            GridView1.Rows[e.NewSelectedIndex].Cells[0].text;//此为你要得到的选中行的第一列的数据 
        } 就是这个事件
      

  8.   

    试试这个,用前台实现:<script type ="text/javascript">
        /**//**
           返回 chk 所在行的单元格值
           @param chk 表示行中的 input type=check 对象
        */
        function getRowValue(chk)
        {   
            //debugger;
    //        if(sender.checked) {  // 根据实际情况,决定是否进行选中状态判断
                var tblRow = chk.parentNode.parentNode;
                // 改变 tblRow.cells[<cellIndex>] 中占位符 <cellIndex> 访问不同单元格
                //return tblRow.cells[1].innerText + ", " + tblRow.cells[2].innerText;
                return tblRow.cells[1].innerHTML + ", " + tblRow.cells[2].innerHTML;
    //        }
        }
        
        /**//**       
           返回指定 grdId 中所有选中行的单元格值
           @param grdId 表示 GridView/DataGrid 客户端 ID,实际上他们均呈现为 <table />
           @param chkIdPart 表示待处理 input type=check 控件的 ID 中的部分,考虑行中可能存在多个 checkbox, 通过此参数可以准确确定目标
        */
        function getAllRowValue(grdId, chkIdPart)
        {
            //debugger;
            var tbl = document.getElementById(grdId);
            var chkList;
            var txt = "";
            /**//* 方法1
            for(var i = 0; i < tbl.rows.length; i++) { // 遍历行
                chkList = tbl.rows[i].getElementsByTagName("input"); // 返回当前行内嵌的所有 input 控件
                for(var j = 0; j < chkList.length; j++) {
                    // 多条件准确确定目标 checkbox
                    if(chkList[j].type == "checkbox" && chkList[j].checked && chkList[j].id.indexOf(chkIdPart) > -1) {
                        txt += getRowValue(chkList[j]) + "\n";    
                        break;                
                    }
                }
            }*/
            /**//* 方法2 */
            chkList = tbl.getElementsByTagName("input");  // 返回表内嵌的所有 input 控件
            for(var j = 0; j < chkList.length; j++) {
                // 多条件准确确定目标 checkbox
                if(chkList[j].type == "checkbox" && chkList[j].checked && chkList[j].id.indexOf(chkIdPart) > -1) {
                    txt += getRowValue(chkList[j]) + "\n";                                    
                }
            }
            return txt;
        }
        </script>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
                <Columns>                              
                    <asp:TemplateField>
                        <ItemTemplate>                        
                            <asp:CheckBox ID="chkItem1" runat="server" onclick="if(this.checked) alert(getRowValue(this))" />
                         </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ProductName" >
                        <ItemTemplate><%# Eval("ProductName") %></ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" />
                </Columns>
            </asp:GridView>
      

  9.   

    试试这个,用前台实现:<script type ="text/javascript">
        /**//**
           返回 chk 所在行的单元格值
           @param chk 表示行中的 input type=check 对象
        */
        function getRowValue(chk)
        {   
            //debugger;
    //        if(sender.checked) {  // 根据实际情况,决定是否进行选中状态判断
                var tblRow = chk.parentNode.parentNode;
                // 改变 tblRow.cells[<cellIndex>] 中占位符 <cellIndex> 访问不同单元格
                //return tblRow.cells[1].innerText + ", " + tblRow.cells[2].innerText;
                return tblRow.cells[1].innerHTML + ", " + tblRow.cells[2].innerHTML;
    //        }
        }
        
        /**//**       
           返回指定 grdId 中所有选中行的单元格值
           @param grdId 表示 GridView/DataGrid 客户端 ID,实际上他们均呈现为 <table />
           @param chkIdPart 表示待处理 input type=check 控件的 ID 中的部分,考虑行中可能存在多个 checkbox, 通过此参数可以准确确定目标
        */
        function getAllRowValue(grdId, chkIdPart)
        {
            //debugger;
            var tbl = document.getElementById(grdId);
            var chkList;
            var txt = "";
            /**//* 方法1
            for(var i = 0; i < tbl.rows.length; i++) { // 遍历行
                chkList = tbl.rows[i].getElementsByTagName("input"); // 返回当前行内嵌的所有 input 控件
                for(var j = 0; j < chkList.length; j++) {
                    // 多条件准确确定目标 checkbox
                    if(chkList[j].type == "checkbox" && chkList[j].checked && chkList[j].id.indexOf(chkIdPart) > -1) {
                        txt += getRowValue(chkList[j]) + "\n";    
                        break;                
                    }
                }
            }*/
            /**//* 方法2 */
            chkList = tbl.getElementsByTagName("input");  // 返回表内嵌的所有 input 控件
            for(var j = 0; j < chkList.length; j++) {
                // 多条件准确确定目标 checkbox
                if(chkList[j].type == "checkbox" && chkList[j].checked && chkList[j].id.indexOf(chkIdPart) > -1) {
                    txt += getRowValue(chkList[j]) + "\n";                                    
                }
            }
            return txt;
        }
        </script>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
                <Columns>                              
                    <asp:TemplateField>
                        <ItemTemplate>                        
                            <asp:CheckBox ID="chkItem1" runat="server" onclick="if(this.checked) alert(getRowValue(this))" />
                         </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ProductName" >
                        <ItemTemplate><%# Eval("ProductName") %></ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" />
                </Columns>
            </asp:GridView>
      

  10.   

    试试这个,用前台实现:<script type ="text/javascript">
        /**//**
           返回 chk 所在行的单元格值
           @param chk 表示行中的 input type=check 对象
        */
        function getRowValue(chk)
        {   
            //debugger;
    //        if(sender.checked) {  // 根据实际情况,决定是否进行选中状态判断
                var tblRow = chk.parentNode.parentNode;
                // 改变 tblRow.cells[<cellIndex>] 中占位符 <cellIndex> 访问不同单元格
                //return tblRow.cells[1].innerText + ", " + tblRow.cells[2].innerText;
                return tblRow.cells[1].innerHTML + ", " + tblRow.cells[2].innerHTML;
    //        }
        }
        
        /**//**       
           返回指定 grdId 中所有选中行的单元格值
           @param grdId 表示 GridView/DataGrid 客户端 ID,实际上他们均呈现为 <table />
           @param chkIdPart 表示待处理 input type=check 控件的 ID 中的部分,考虑行中可能存在多个 checkbox, 通过此参数可以准确确定目标
        */
        function getAllRowValue(grdId, chkIdPart)
        {
            //debugger;
            var tbl = document.getElementById(grdId);
            var chkList;
            var txt = "";
            /**//* 方法1
            for(var i = 0; i < tbl.rows.length; i++) { // 遍历行
                chkList = tbl.rows[i].getElementsByTagName("input"); // 返回当前行内嵌的所有 input 控件
                for(var j = 0; j < chkList.length; j++) {
                    // 多条件准确确定目标 checkbox
                    if(chkList[j].type == "checkbox" && chkList[j].checked && chkList[j].id.indexOf(chkIdPart) > -1) {
                        txt += getRowValue(chkList[j]) + "\n";    
                        break;                
                    }
                }
            }*/
            /**//* 方法2 */
            chkList = tbl.getElementsByTagName("input");  // 返回表内嵌的所有 input 控件
            for(var j = 0; j < chkList.length; j++) {
                // 多条件准确确定目标 checkbox
                if(chkList[j].type == "checkbox" && chkList[j].checked && chkList[j].id.indexOf(chkIdPart) > -1) {
                    txt += getRowValue(chkList[j]) + "\n";                                    
                }
            }
            return txt;
        }
        </script>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
                <Columns>                              
                    <asp:TemplateField>
                        <ItemTemplate>                        
                            <asp:CheckBox ID="chkItem1" runat="server" onclick="if(this.checked) alert(getRowValue(this))" />
                         </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ProductName" >
                        <ItemTemplate><%# Eval("ProductName") %></ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" />
                </Columns>
            </asp:GridView>
      

  11.   

    设置CommandName的值为select即可选中
      

  12.   

    GridView1_SelectedIndexChanging
    gridview 的事件里面有个 selectedindexchanging事件  去那里找
      

  13.   

    “/”应用程序中的服务器错误。
    --------------------------------------------------------------------------------由于目标机器积极拒绝,无法连接。 192.168.1.242:8086 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Net.Sockets.SocketException: 由于目标机器积极拒绝,无法连接。 192.168.1.242:8086源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: 
    [SocketException (0x274d): 由于目标机器积极拒绝,无法连接。 192.168.1.242:8086]
       System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +2668969
       System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +717
       CSDN.Community.TopicFileDataCenter.TopicFileComponent.Reply(ReplyGenerateData rgd) +0
       CSDN.Community.TopicFileDataCenter.TopicFileDataCenterEntry.Reply(Guid topicId, DateTime createDate, ReplyInfo reply, CommunityUser user, UserSectionProfile usp) +83
       CSDN.Community.PointForum.Services.ReplyTopicManager.ReplyTopic(ReplyInfo reply, DateTime topicPostDate, String& errorInfo, CommunityUser user, UserSectionProfile usp) +786
       CSDN.Community.PointForum.WebControls.ReplyTopicPage.bt_Submit_Click(Object sender, EventArgs e) +604
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746 
    --------------------------------------------------------------------------------
    版本信息: Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433 
      

  14.   

    http://blog.csdn.net/sws8327/archive/2007/05/08/1600718.aspx#750674