积极答复者
想当然的写了个同一页传参的代码!错的很惨!求解!

问题
-
界面上有:
1.一个SqldataSource,它的数据源是"SELECT [ContractNumber], [City], [Road], [Address] FROM [ContractTable]"。
2.一个GridView1,加入了一个选择模块LinkButton_ContractNumber.
3.添加了4个Label,分别是Label_ContractNumber、Label_City、Label_Road、Label_Address。
我要做的效果是点击某一行的“选择”后,鼠标跳到Label_ContractNumber上,并把选中的结果分别显示到4个Label上。
=================问题================
1.鼠标不能跳到Label_ContractNumber上,是不是Label这个控件本身就不支持?
-
2.Label_ContractNumber能正确显示,但其他三个Label只显示“City、Road、 Address”
-
3.在<Columns></Columns>中的数据都有个DataField属性,这个应该就是用来传参数的那个属性吧?比如跳转到下一页会使用
"string myConstractNumber =Request.QueryString["ContractNumber"].ToString();"
而同一个界面传参数听说一般是用 ViewState["args"] = "XXXX";但是我ViewState还没有接触过,正确的应该怎么写呢???
======================前台========================
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default11.aspx.cs" Inherits="Default11" %> <!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> <style type="text/css"> .style1 { width: 100%; } </style> </head> <body> <form id="form1" runat="server"> <div> <table cellpadding="0" cellspacing="0" class="style1"> <tr> <td> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ContractNumber" DataSourceID="SqlDataSource1" onselectedindexchanged="GridView1_SelectedIndexChanged"> <Columns> <asp:TemplateField HeaderText="选择"> <ItemTemplate> <asp:LinkButton ID="LinkButton_ContractNumber" runat="server" CausesValidation="False" CommandName="Select">选择</asp:LinkButton> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" ReadOnly="True" SortExpression="ContractNumber" /> <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" /> <asp:BoundField DataField="Road" HeaderText="Road" SortExpression="Road" /> <asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:长铁物业公司资产数据库ConnectionString2 %>" SelectCommand="SELECT [ContractNumber], [City], [Road], [Address] FROM [ContractTable]"> </asp:SqlDataSource> </td> </tr> <tr> <td> <asp:Label ID="Label_ContractNumber" runat="server" Text="Label"></asp:Label> </td> </tr> <tr> <td> <asp:Label ID="Label_City" runat="server" Text="Label"></asp:Label> </td> </tr> <tr> <td> <asp:Label ID="Label_Road" runat="server" Text="Label"></asp:Label> </td> </tr> <tr> <td> <asp:Label ID="Label_Address" runat="server" Text="Label"></asp:Label> </td> </tr> </table> </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; public partial class Default11 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { string ContractNumber = GridView1.SelectedValue.ToString(); string City = GridView1.SelectedIndex.ToString ("City"); string Road = GridView1.SelectedIndex.ToString("Road"); string Address = GridView1.SelectedIndex.ToString("Address"); Label_ContractNumber.Text = ContractNumber; Label_City.Text = City; Label_Road.Text = Road; Label_Address.Text = Address; Label_ContractNumber.Focus(); } }
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
答案
-
1.在web页面上,是不能控制鼠标位置的。最多你可以将页面的焦点设置到这个label上。
2.这个写法是错误的:
string City = GridView1.SelectedIndex.ToString ("City"); string Road = GridView1.SelectedIndex.ToString("Road"); string Address = GridView1.SelectedIndex.ToString("Address");
正确的做法是得到选择的行,然后访问对应的cell获得值。GridViewRow row = CustomersGridView.Rows[e.NewSelectedIndex]; string city=row.Cells[2].Text ;//假设2对应的是city列
3.同一个页面上保存值可以使用viewstate,你的写法没错,这个可以查一下bol。
family as water- 已标记为答案 linjiangxian11 2011年8月29日 4:26