none
想当然的写了个同一页传参的代码!错的很惨!求解! RRS feed

  • 问题

  •     界面上有:

        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# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月27日 5:36

答案

  • 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
    2011年8月27日 12:27