积极答复者
请问若何获得GRIDVIEW单击行取值。

问题
-
<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值,最好不要添加什么按钮之类的?
答案
-
>>不知错在哪里了,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(); }
- 已编辑 ThankfulHeart 2012年7月3日 7:39 修改代码……
- 已标记为答案 彭123 2012年7月3日 7:45
-
最终结果:
<%@ 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
全部回复
-
>>TextBox2怎样才能获取被单击行的FID值,最好不要添加什么按钮之类的?
你是想不通过按钮点击,而是点击行,直接把FID赋值到TextBox中?为什么不能用js?其实可以啊!
- 已编辑 ThankfulHeart 2012年7月3日 6:21
-
之所以会出现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
- 已编辑 ThankfulHeart 2012年7月3日 6:50
-
什么叫“不知道怎么办”?我是按照你的思路来的啊?
你不会这样做吗?
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! } } }
-
你好,我的前后台。
<%@ 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 (!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没有进行绑定。 -
>>不知错在哪里了,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(); }
- 已编辑 ThankfulHeart 2012年7月3日 7:39 修改代码……
- 已标记为答案 彭123 2012年7月3日 7:45
-
最终结果:
<%@ 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