none
请问若何获得GRIDVIEW单击行取值。 RRS feed

  • 问题

  • <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="FID" DataSourceID="SqlDataSource1"              >
            <Columns>
                <asp:BoundField DataField="FID" HeaderText="FID" InsertVisible="False" 
                    ReadOnly="True" SortExpression="FID" />
                <asp:BoundField DataField="StaffNo" HeaderText="StaffNo" 
                    SortExpression="StaffNo" />
                <asp:BoundField DataField="FDate" HeaderText="FDate" SortExpression="FDate" />
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
            SelectCommand="SELECT [FID], [StaffNo], [FDate] FROM [WorkTime]">
        </asp:SqlDataSource>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

    TextBox2怎样才能获取被单击行的FID值,最好不要添加什么按钮之类的?
    2012年7月3日 4:58

答案

  • >>不知错在哪里了,GRIDVIEW2没有进行绑定。

     if (Request.Form["HiddenField1"]!=null)
     {
                 string id = Request.Form["HiddenField1"];
                 HiddenField1.Value = id;
                 //这里请使用手动方式的SqlDataAdapter+Fill方法填充DataTable,绑定到另外一个GridView!
                 SqlConnection sqlcon = new SqlConnection();
                 sqlcon.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
                 sqlcon.Open();//连接并打开数据库
                 //给GRIDVIEW绑定值
                 string str1 = "SELECT [FID], [StaffNo], [FDate] FROM [WorkTime] where [FID]='"+HiddenField1.Value.ToString()+"'";
                 // 创建一个适配器
                 SqlDataAdapter adapter = new SqlDataAdapter(str1, sqlcon);
                 // 创建DataSet,用于存储数据.
                 DataSet 权限表 = new DataSet();
                 // 执行查询,并将数据导入DataSet.
                 adapter.Fill(权限表, "结果");
                 GridView2.DataSource = 权限表.Tables[0];
                 GridView2.DataBind();
             }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已编辑 ThankfulHeart 2012年7月3日 7:39 修改代码……
    • 已标记为答案 彭123 2012年7月3日 7:45
    2012年7月3日 7:38
  • 最终结果:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="HiddenField隐藏域.aspx.cs" Inherits="新文件夹1_HiddenField隐藏域" %>
    
    <!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>
        
        <script src="../jQuery/jquery-1.7.2.js" type="text/javascript"></script>
        <script>
            $(function () {
                $("#GridView1 tr").click(function () {
                    //点击之后给隐藏域赋值
                    $("#HiddenField1").val($(this).find("td").eq(0).html());
                    //整个页面刷新
                    document.forms[0].submit();
                });
            });
        </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataKeyNames="FID" DataSourceID="SqlDataSource1" 
                onrowdatabound="GridView1_RowDataBound">
                <Columns>
                    <asp:BoundField DataField="FID" HeaderText="FID" InsertVisible="False" 
                        ReadOnly="True" SortExpression="FID" />
                    <asp:BoundField DataField="StaffNo" HeaderText="StaffNo" 
                        SortExpression="StaffNo" />
                    <asp:BoundField DataField="FDate" HeaderText="FDate" SortExpression="FDate" />
                </Columns>
            </asp:GridView>
    
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
                SelectCommand="SELECT top 5 [FID], [StaffNo], [FDate] FROM [WorkTime]">
            </asp:SqlDataSource>
    
            <asp:HiddenField ID="HiddenField1" runat="server" />
        </div>
        <div>
            <asp:GridView ID="GridView2" runat="server">
            </asp:GridView>
           
        </div>
        </form>
    </body>
    </html>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using Microsoft.Reporting.WebForms;
    using System.Collections;
    using System.Configuration;
    using System.Web.Security;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;
    using System.Data.OleDb;
    using System.IO;
    using System.Web.SessionState;
    
    public partial class 新文件夹1_HiddenField隐藏域 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
            //如果存在隐藏域,在服务端保留该值
            if (Request.Form["HiddenField1"] != null)
            {
                string id = Request.Form["HiddenField1"];
                HiddenField1.Value = id;
                //这里请使用手动方式的SqlDataAdapter+Fill方法填充DataTable,绑定到另外一个GridView!
                SqlConnection sqlcon = new SqlConnection();
                sqlcon.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
                sqlcon.Open();//连接并打开数据库
                //给GRIDVIEW绑定值
                string str1 = "SELECT [FID], [StaffNo], [FDate] FROM [WorkTime] where [FID]='"+HiddenField1.Value.ToString()+"'";
                // 创建一个适配器
                SqlDataAdapter adapter = new SqlDataAdapter(str1, sqlcon);
                // 创建DataSet,用于存储数据.
                DataSet 权限表 = new DataSet();
                // 执行查询,并将数据导入DataSet.
                adapter.Fill(权限表, "结果");
                GridView2.DataSource = 权限表.Tables[0];
                GridView2.DataBind();
    
            }
    
        }
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {            
                //鼠标经过时,行背景色变 
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#00A9FF'");
                //鼠标移出时,行背景色变 
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#FFFFFF'");
    
            }
        }
    }

    • 已建议为答案 ThankfulHeart 2012年7月3日 7:57
    • 已标记为答案 彭123 2012年7月3日 8:06
    2012年7月3日 7:50

全部回复

  • 用js可以吗?你获取FID是为了显示还是留做服务端处理?


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月3日 5:33
  • 用js可以吗?你获取FID是为了显示还是留做服务端处理?


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    你好,是这样的,我是要根据这个FID的值来进行服务端处理。JS我实在是不懂。
    2012年7月3日 5:41
  • 你要把FID传入到服务端做什么处理?行点击的时候出发事件还是?


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月3日 5:49
  • 你要把FID传入到服务端做什么处理?行点击的时候出发事件还是?


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    根据这个值查询数据,然后将查询出来的值赋值给另外一个GRIDVIEW
    2012年7月3日 6:00
  • 你另外一个GridView是在另外一个页面?想通过xxx.aspx?id=Number方式传递?

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月3日 6:12
  • 不是,另外一个GRIDVIEW在同一个页面,但是显示的数据不同。另外一个显示的是,姓名,工号,部门。
    2012年7月3日 6:14
  • 就像这个图片一样,在左边选择,然后在右边显示。

    还有,不知道怎么回事,上传的图片莫名其妙的黑了一半。

    请问你博客园里面的文章可以转载吗?

    • 已编辑 彭123 2012年7月3日 6:20
    2012年7月3日 6:17
  • >>TextBox2怎样才能获取被单击行的FID值,最好不要添加什么按钮之类的?

    你是想不通过按钮点击,而是点击行,直接把FID赋值到TextBox中?为什么不能用js?其实可以啊!


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月3日 6:21
  • 我主要的目的是通过单击行,触发事件,根据被单击行的值来查询数据,最后对同一页面的GRIDVIEW2进行绑定。

    2012年7月3日 6:28
  • 我主要的目的是通过单击行,触发事件,根据被单击行的值来查询数据,最后对同一页面的GRIDVIEW2进行绑定。


    那和TextBox有什么关系?

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月3日 6:29
  • 之所以会出现TEXTBOX是为了动作分开,我想的是先完成单击获取值。再去研究根据这个值给GRIDVIEW2赋值。最后完成的页面是没有TEXTBOX2的。

    2012年7月3日 6:31
  • 之所以会出现TEXTBOX是为了动作分开,我想的是先完成单击获取值。再去研究根据这个值给GRIDVIEW2赋值。最后完成的页面是没有TEXTBOX2的。

    好。那你还不如用HiddenField隐藏域呢!

    参考:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="CSharp.WebForm2" %>
    
    <!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>
        <script src="jquery-1.7.2.js"></script>
        <script>
            $(function ()
            {
                $("#GridView1 tr:gt(0)").click(function ()
                {
                    //点击之后给隐藏域赋值
                    $("#HiddenField1").val($(this).find("td").eq(0).html());
                    //整个页面刷新
                    document.forms[0].submit();
                });
            });
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
    
            <asp:HiddenField ID="HiddenField1" runat="server" />
        </div>
        </form>
    </body>
    </html>

    后台代码:

    public partial class WebForm2 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    //模拟加载数据库数据
                    GridView1.DataSource = new[] 
                    {
                        new{FId=1,name="Test1"},
                        new{FId=2,name="Test2"}
                    };
                    GridView1.DataBind();
                }
    
                //如果存在隐藏域,在服务端保留该值
                if (HiddenField1.Value != Request.Form["HiddenField1"])
                {
                    HiddenField1.Value = Request.Form["HiddenField1"];
                }
            }
        }

     这样你就可以在本页面随便使用 HiddenField啦!

    对了,本示例用到了jQuery,请务必引入这个库:Uncompressed


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月3日 6:37
  • 你好,你是代码我试验后不知道应该怎么办了,你好似给HiddenField赋值,但是我百度后却仍然无法理解这个控件。ASP.NET好像不触发事件就无法给GRIDVIEW2重新绑定吧。

    2012年7月3日 6:49
  • 什么叫“不知道怎么办”?我是按照你的思路来的啊?

    你不会这样做吗?

    1)前台代码和我前一个aspx完全一致。

    2)后台代码变化:

    public partial class WebForm2 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    //模拟加载数据库数据
                    GridView1.DataSource = new[] 
                    {
                        new{FId=1,name="Test1"},
                        new{FId=2,name="Test2"}
                    };
                    GridView1.DataBind();
                }
    
                //如果存在隐藏域,在服务端保留该值
                if (Request.Form["HiddenField1"]!=HiddenField.Value)
                {
                   string id = Request.Form["HiddenField1"];
                   HiddenField1.Value = id;
                   //这里请使用手动方式的SqlDataAdapter+Fill方法填充DataTable,绑定到另外一个GridView!
                }
            }
        }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月3日 6:54
  • 你好,我的前后台。

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="HiddenField隐藏域.aspx.cs" Inherits="新文件夹1_HiddenField隐藏域" %>
    
    <!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>
        
        <script src="../jQuery/jquery-1.7.2.js" type="text/javascript"></script>
        <script>
            $(function () {
                $("#GridView1 tr").click(function () {
                    //点击之后给隐藏域赋值
                    $("#HiddenField1").val($(this).find("td").eq(0).html());
                    //整个页面刷新
                    document.forms[0].submit();
                });
            });
        </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataKeyNames="FID" DataSourceID="SqlDataSource1" 
                onrowdatabound="GridView1_RowDataBound">
                <Columns>
                    <asp:BoundField DataField="FID" HeaderText="FID" InsertVisible="False" 
                        ReadOnly="True" SortExpression="FID" />
                    <asp:BoundField DataField="StaffNo" HeaderText="StaffNo" 
                        SortExpression="StaffNo" />
                    <asp:BoundField DataField="FDate" HeaderText="FDate" SortExpression="FDate" />
                </Columns>
            </asp:GridView>
    
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
                SelectCommand="SELECT top 5 [FID], [StaffNo], [FDate] FROM [WorkTime]">
            </asp:SqlDataSource>
    
            <asp:HiddenField ID="HiddenField1" runat="server" />
        </div>
        <div>
            <asp:GridView ID="GridView2" runat="server">
            </asp:GridView>
        </div>
        </form>
    </body>
    </html>

    2012年7月3日 7:11
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using Microsoft.Reporting.WebForms;
    using System.Collections;
    using System.Configuration;
    using System.Web.Security;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;
    using System.Data.OleDb;
    using System.IO;
    using System.Web.SessionState;
    
    public partial class 新文件夹1_HiddenField隐藏域 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            /*
            if (!IsPostBack)
            {
                //模拟加载数据库数据
                GridView1.DataSource = new[] 
                    {
                        new{FId=1,name="Test1"},
                        new{FId=2,name="Test2"}
                    };
                GridView1.DataBind();
            }
            */
            //如果存在隐藏域,在服务端保留该值
            if (HiddenField1.Value != Request.Form["HiddenField1"])
            {
                string id = Request.Form["HiddenField1"];
                HiddenField1.Value = id;
                //这里请使用手动方式的SqlDataAdapter+Fill方法填充DataTable,绑定到另外一个GridView!
                SqlConnection sqlcon = new SqlConnection();
                sqlcon.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
                sqlcon.Open();//连接并打开数据库
                //给GRIDVIEW绑定值
                string str1 = "SELECT [FID], [StaffNo], [FDate] FROM [WorkTime] where [FID]='"+HiddenField1.Value.ToString()+"'";
                // 创建一个适配器
                SqlDataAdapter adapter = new SqlDataAdapter(str1, sqlcon);
                // 创建DataSet,用于存储数据.
                DataSet 权限表 = new DataSet();
                // 执行查询,并将数据导入DataSet.
                adapter.Fill(权限表, "结果");
                GridView2.DataSource = 权限表.Tables[0];
                GridView2.DataBind();
    
            }
    
        }
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
    
            if (e.Row.RowType == DataControlRowType.DataRow)
            {            
                //鼠标经过时,行背景色变 
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#00A9FF'");
                //鼠标移出时,行背景色变 
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#FFFFFF'");
    
            }
        }

    不知错在哪里了,GRIDVIEW2没有进行绑定。
    2012年7月3日 7:11
  • >>不知错在哪里了,GRIDVIEW2没有进行绑定。

     if (Request.Form["HiddenField1"]!=null)
     {
                 string id = Request.Form["HiddenField1"];
                 HiddenField1.Value = id;
                 //这里请使用手动方式的SqlDataAdapter+Fill方法填充DataTable,绑定到另外一个GridView!
                 SqlConnection sqlcon = new SqlConnection();
                 sqlcon.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
                 sqlcon.Open();//连接并打开数据库
                 //给GRIDVIEW绑定值
                 string str1 = "SELECT [FID], [StaffNo], [FDate] FROM [WorkTime] where [FID]='"+HiddenField1.Value.ToString()+"'";
                 // 创建一个适配器
                 SqlDataAdapter adapter = new SqlDataAdapter(str1, sqlcon);
                 // 创建DataSet,用于存储数据.
                 DataSet 权限表 = new DataSet();
                 // 执行查询,并将数据导入DataSet.
                 adapter.Fill(权限表, "结果");
                 GridView2.DataSource = 权限表.Tables[0];
                 GridView2.DataBind();
             }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已编辑 ThankfulHeart 2012年7月3日 7:39 修改代码……
    • 已标记为答案 彭123 2012年7月3日 7:45
    2012年7月3日 7:38
  • 行了,感谢你让我又学到新的东西,我从来不知道还有HiddenField控件,我需要对ASP.NET控件再次学习了。

    谢谢。

    2012年7月3日 7:47
  • 行了,感谢你让我又学到新的东西,我从来不知道还有HiddenField控件,我需要对ASP.NET控件再次学习了。

    谢谢。


    哈哈!再接再厉!欢迎再来!互帮互助!

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月3日 7:48
  • 最终结果:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="HiddenField隐藏域.aspx.cs" Inherits="新文件夹1_HiddenField隐藏域" %>
    
    <!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>
        
        <script src="../jQuery/jquery-1.7.2.js" type="text/javascript"></script>
        <script>
            $(function () {
                $("#GridView1 tr").click(function () {
                    //点击之后给隐藏域赋值
                    $("#HiddenField1").val($(this).find("td").eq(0).html());
                    //整个页面刷新
                    document.forms[0].submit();
                });
            });
        </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataKeyNames="FID" DataSourceID="SqlDataSource1" 
                onrowdatabound="GridView1_RowDataBound">
                <Columns>
                    <asp:BoundField DataField="FID" HeaderText="FID" InsertVisible="False" 
                        ReadOnly="True" SortExpression="FID" />
                    <asp:BoundField DataField="StaffNo" HeaderText="StaffNo" 
                        SortExpression="StaffNo" />
                    <asp:BoundField DataField="FDate" HeaderText="FDate" SortExpression="FDate" />
                </Columns>
            </asp:GridView>
    
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
                SelectCommand="SELECT top 5 [FID], [StaffNo], [FDate] FROM [WorkTime]">
            </asp:SqlDataSource>
    
            <asp:HiddenField ID="HiddenField1" runat="server" />
        </div>
        <div>
            <asp:GridView ID="GridView2" runat="server">
            </asp:GridView>
           
        </div>
        </form>
    </body>
    </html>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using Microsoft.Reporting.WebForms;
    using System.Collections;
    using System.Configuration;
    using System.Web.Security;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;
    using System.Data.OleDb;
    using System.IO;
    using System.Web.SessionState;
    
    public partial class 新文件夹1_HiddenField隐藏域 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
            //如果存在隐藏域,在服务端保留该值
            if (Request.Form["HiddenField1"] != null)
            {
                string id = Request.Form["HiddenField1"];
                HiddenField1.Value = id;
                //这里请使用手动方式的SqlDataAdapter+Fill方法填充DataTable,绑定到另外一个GridView!
                SqlConnection sqlcon = new SqlConnection();
                sqlcon.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
                sqlcon.Open();//连接并打开数据库
                //给GRIDVIEW绑定值
                string str1 = "SELECT [FID], [StaffNo], [FDate] FROM [WorkTime] where [FID]='"+HiddenField1.Value.ToString()+"'";
                // 创建一个适配器
                SqlDataAdapter adapter = new SqlDataAdapter(str1, sqlcon);
                // 创建DataSet,用于存储数据.
                DataSet 权限表 = new DataSet();
                // 执行查询,并将数据导入DataSet.
                adapter.Fill(权限表, "结果");
                GridView2.DataSource = 权限表.Tables[0];
                GridView2.DataBind();
    
            }
    
        }
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {            
                //鼠标经过时,行背景色变 
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#00A9FF'");
                //鼠标移出时,行背景色变 
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#FFFFFF'");
    
            }
        }
    }

    • 已建议为答案 ThankfulHeart 2012年7月3日 7:57
    • 已标记为答案 彭123 2012年7月3日 8:06
    2012年7月3日 7:50