none
同一个界面如何传参呢??? RRS feed

  • 问题

  •     数据库中有两个表,分别是ContractTable(合同表)和RentTable(租金表),ContractTable中有一个ContractNumber(合同号)字段,RentTable中有ContractNumber(合同号)、riqi(日期)、zujin(租金)三个字段(RentTable中的ContractNumber和ContractTable中的ContractNumber相对应)。

    -

        前台代码中我放了GridView1、GridView2和一个SqlDatasource1,GridView1对应ContractTable(Select ContractNumber from ContractTable)。GridView2我希望是选择了GridView1中的ContractNumber,就能在GridView2上显示出RentTable中所有相应ContractNumber的数据。

     

    -

       这里附上了前台代码代码和后台代码,我考虑:1、前台给GridView1的“启用选定内容”打上勾,

      2、然后后台代码应该使用 SelectedIndexChanged  事件 ,每当点击某一个ContractNumber前的“选择”时就会得到GridView1中ContractNumber的值,

      3、然后把这个值ToString,赋予给GridView2的数据源。

     

    -

    问题是我是菜鸟,还没接触过这种难度的例子,写不出来!求各位帮忙看下!!谢谢!!

     

    ============前台=================

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="RentModify3.aspx.cs" Inherits="RentTable_RentModify3" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
      <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:CommandField ShowSelectButton="True" />
                <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" 
                  ReadOnly="True" SortExpression="ContractNumber" />
              </Columns>
            </asp:GridView>
          </td>
        </tr>
        <tr>
          <td>
            <asp:GridView ID="GridView2" runat="server">
            </asp:GridView>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
          </td>
        </tr>
        <tr>
          <td>
            &nbsp;</td>
        </tr>
        <tr>
          <td>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
              ConnectionString="<%$ ConnectionStrings:长铁物业公司资产数据库ConnectionString %>" 
              SelectCommand="SELECT [ContractNumber] FROM [ContractTable]">
            </asp:SqlDataSource>
          </td>
        </tr>
        <tr>
          <td>
            <asp:SqlDataSource ID="SqlDataSource2" runat="server"></asp:SqlDataSource>
          </td>
        </tr>
      </table>
    </asp:Content>
    <asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    </asp:Content>
    


    ===

    ===========后台=============

    =

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class RentTable_RentModify3 : System.Web.UI.Page
    {
      protected void Page_Load(object sender, EventArgs e)
      {
    
      }
      protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
      {
        string s1 = GridView1.SelectedIndex.ToString("ContractNumber");
        Label1.Text = s1;
        //这里要把GridView1的ContactNumber传给GridView2,然后再利用
        //“Select * from RentTable where ContractNumber = 'GridView传过来的参数'”
        //之后还要绑定GridView2的数据源等工作,很茫然!求解!
      }
    }
    



    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月23日 4:34

答案

  • 请参考不写后台代码的方式

    请注意粗体字是重点

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
    
    <!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">
     <!--ContractTable表使用-->
     <asp:SqlDataSource runat="server" ID="sds_ContractTable" ConnectionString="<%$ ConnectionStrings:NorthwindChineseConnectionString %>"
      SelectCommand="SELECT [ContractNumber] FROM [ContractTable]">
     </asp:SqlDataSource>
     <!--RentTable表使用-->
     <asp:SqlDataSource runat="server" ID="sds_RentTable" 
      ConnectionString="<%$ ConnectionStrings:NorthwindChineseConnectionString %>" 
      SelectCommand="SELECT [ContractNumber], [riqi], [zujin] FROM [RentTable] WHERE ([ContractNumber] = @ContractNumber)" >
    
      <SelectParameters>
       <asp:ControlParameter ControlID="gv_ContractTable" Name="ContractNumber" 
        PropertyName="SelectedValue"  />
      </SelectParameters>
    
     </asp:SqlDataSource>
    
     <br />
    
    
     <asp:GridView runat="server" AutoGenerateColumns="False" DataKeyNames ="ContractNumber"
      ID="gv_ContractTable" DataSourceID="sds_ContractTable" >
    
      <Columns>
       <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" 
        SortExpression="ContractNumber" />
       <asp:TemplateField ShowHeader="False">
        <ItemTemplate>
         <asp:LinkButton ID="btn_Select" runat="server" CausesValidation="False" 
          CommandName="Select" Text="選取"></asp:LinkButton>
        </ItemTemplate>
       </asp:TemplateField>
    
      </Columns>
    
     </asp:GridView>
    
     <br />
    
     <asp:GridView runat="server" ID="gv_RentTable" AutoGenerateColumns="False" 
      DataSourceID="sds_RentTable" >
      <Columns>
       <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" 
        SortExpression="ContractNumber" />
       <asp:BoundField DataField="riqi" HeaderText="riqi" SortExpression="riqi" />
       <asp:BoundField DataField="zujin" HeaderText="zujin" SortExpression="zujin" />
      </Columns>
     </asp:GridView>
     </form>
    </body>
    </html>
    

    Shadowと愉快なコード達

    2011年8月23日 5:33

全部回复

  • 試試看這樣是不是您要的效果。

    DataTable dt;
    //暫存ContractNumber用
    if (ViewState["Contract"] == null)
    {
    	dt = new DataTable();
    	dt.Columns.Add("ContractNumber", typeof(int));
    }
    else
    	dt = (DataTable)ViewState["Contract"];
    
    DataRow dr = dt.NewRow();
    dr[0] = GridView1.Rows[e.NewSelectedIndex].Cells[1].Text;
    dt.Rows.Add(dr);
    ViewState["Contract"] = dt;
    
    GridView2.DataSource = dt;
    GridView2.DataBind();
    



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月23日 5:20
  • 下午我去试试!谢谢您的及时回复!

        能否请您加上详细的注释,我还没接触过类似的例子!

    我希望通过您的例子说明来弄懂,学会自己写!


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月23日 5:29
  • 请参考不写后台代码的方式

    请注意粗体字是重点

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
    
    <!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">
     <!--ContractTable表使用-->
     <asp:SqlDataSource runat="server" ID="sds_ContractTable" ConnectionString="<%$ ConnectionStrings:NorthwindChineseConnectionString %>"
      SelectCommand="SELECT [ContractNumber] FROM [ContractTable]">
     </asp:SqlDataSource>
     <!--RentTable表使用-->
     <asp:SqlDataSource runat="server" ID="sds_RentTable" 
      ConnectionString="<%$ ConnectionStrings:NorthwindChineseConnectionString %>" 
      SelectCommand="SELECT [ContractNumber], [riqi], [zujin] FROM [RentTable] WHERE ([ContractNumber] = @ContractNumber)" >
    
      <SelectParameters>
       <asp:ControlParameter ControlID="gv_ContractTable" Name="ContractNumber" 
        PropertyName="SelectedValue"  />
      </SelectParameters>
    
     </asp:SqlDataSource>
    
     <br />
    
    
     <asp:GridView runat="server" AutoGenerateColumns="False" DataKeyNames ="ContractNumber"
      ID="gv_ContractTable" DataSourceID="sds_ContractTable" >
    
      <Columns>
       <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" 
        SortExpression="ContractNumber" />
       <asp:TemplateField ShowHeader="False">
        <ItemTemplate>
         <asp:LinkButton ID="btn_Select" runat="server" CausesValidation="False" 
          CommandName="Select" Text="選取"></asp:LinkButton>
        </ItemTemplate>
       </asp:TemplateField>
    
      </Columns>
    
     </asp:GridView>
    
     <br />
    
     <asp:GridView runat="server" ID="gv_RentTable" AutoGenerateColumns="False" 
      DataSourceID="sds_RentTable" >
      <Columns>
       <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" 
        SortExpression="ContractNumber" />
       <asp:BoundField DataField="riqi" HeaderText="riqi" SortExpression="riqi" />
       <asp:BoundField DataField="zujin" HeaderText="zujin" SortExpression="zujin" />
      </Columns>
     </asp:GridView>
     </form>
    </body>
    </html>
    

    Shadowと愉快なコード達

    2011年8月23日 5:33
  • 基本到现在我整个程序快完成了,后台代码我几乎没写过,能通过前台写代码是我目前状态最容易接受的!谢谢了!
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月23日 5:38
  • 后台代码实现大概是这样

    (先看前台)

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
    
    <!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">
      <!--ContractTable表使用-->
      <asp:SqlDataSource runat="server" ID="sds_ContractTable" ConnectionString="<%$ ConnectionStrings:NorthwindChineseConnectionString %>"
        SelectCommand="SELECT [ContractNumber] FROM [ContractTable]"></asp:SqlDataSource>
    
      <br />
      <asp:GridView runat="server" AutoGenerateColumns="False" DataKeyNames="ContractNumber"
        ID="gv_ContractTable" DataSourceID="sds_ContractTable" 
        onselectedindexchanged="gv_ContractTable_SelectedIndexChanged">
        <Columns>
          <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" SortExpression="ContractNumber" />
          <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
              <asp:LinkButton ID="btn_Select" runat="server" CausesValidation="False" CommandName="Select"
                Text="選取"></asp:LinkButton>
            </ItemTemplate>
          </asp:TemplateField>
        </Columns>
      </asp:GridView>
      <br />
    
      <!--RentTable表使用-->
      <asp:GridView runat="server" ID="gv_RentTable" />
       
      </form>
    </body>
    </html>
    
    

    然後SelectedIndexChanged事件

      //DB連線字符串
      string connStr = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NorthwindChineseConnectionString"].ConnectionString;
      protected void gv_ContractTable_SelectedIndexChanged(object sender, EventArgs e)
      {
        string ContractNumber = gv_ContractTable.SelectedValue.ToString();//ContractTable的DataKey
        using (SqlConnection conn = new SqlConnection(this.connStr))
        {
          SqlDataAdapter da = new SqlDataAdapter("Select * from RentTable Where ContractNumber = '" + ContractNumber + "'", conn);
          DataSet ds = new DataSet();
          da.Fill(ds);
          gv_RentTable.DataSource = ds;
          gv_RentTable.DataBind();
        }
      }
    




    Shadowと愉快なコード達
    2011年8月23日 5:50
  • 下午我去试试!谢谢您的及时回复!

        能否请您加上详细的注释,我还没接触过类似的例子!

    我希望通过您的例子说明来弄懂,学会自己写!


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    若資料量不大,或是欄位真的只有一個ContractNumber,用DataTable搭配ViewState可以減少往返DB的次數,反之,則建議採用Shadow兄所提供的方法。

    DataTable dt;
    //暫存ContractNumber用
    if (ViewState["Contract"] == null)
    {
    	dt = new DataTable();
    	dt.Columns.Add("ContractNumber", typeof(int));
    }
    else
    	dt = (DataTable)ViewState["Contract"];
    
    //把GridView1所選取的ContractNumber加入倒DataTable
    DataRow dr = dt.NewRow();
    dr[0] = GridView1.Rows[e.NewSelectedIndex].Cells[1].Text;
    dt.Rows.Add(dr);
    //為避免PostBack後選取的ContractNumber消失,把DataTable的內容存到ViewState
    ViewState["Contract"] = dt;
    
    //將所有從GridView1所選取的ContractNumber Binding給GridView2
    GridView2.DataSource = dt;
    GridView2.DataBind();
    



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月23日 6:11
  • ===

    ===连写了两篇===

    === 

     

     

     因为实际上ContractTable不止一个字段,所以参考了Terry大的意见,使用您第一回复贴的完全用前台代码的例子,经测试完全满足要求。但我在您第二回复贴加入了SelectedIndexChanged事件和后台代码,反而不能运行了。我猜测您的第一帖和第二贴是两个不同的方法,二选一即可!

    错误提示和前后台代码如下(后台我略作了修改并做了注释,您提供的代码我有些没用过):

    -

    ==========前台================

     

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="RentModify3.aspx.cs" Inherits="RentTable_RentModify3" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
     <table cellpadding="0" cellspacing="0" class="style1">
      <tr>
       <td>
        <asp:SqlDataSource ID="SqlDataSource_ContractTable" runat="server" 
         ConnectionString="<%$ ConnectionStrings:长铁物业公司资产数据库ConnectionString %>" 
         SelectCommand="SELECT [ContractNumber], [City], [Road], [Address] FROM [ContractTable]">
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SqlDataSource_RentTable" runat="server" 
         ConnectionString="<%$ ConnectionStrings:长铁物业公司资产数据库ConnectionString %>" 
         SelectCommand="SELECT ContractNumber, FirstRentDate, EndRentDate, AddRent FROM RentTable WHERE (ContractNumber = @ContractNumber)">
         <SelectParameters>
          <asp:ControlParameter ControlID="GridView_ContractTable" Name="ContractNumber" 
           PropertyName="SelectedValue" />
         </SelectParameters>
        </asp:SqlDataSource>
       </td>
       <td>
        &nbsp;</td>
      </tr>
      <tr>
       <td>
        <asp:GridView ID="GridView_ContractTable" runat="server" 
         AutoGenerateColumns="False" DataKeyNames="ContractNumber" 
         DataSourceID="SqlDataSource_ContractTable" 
         onselectedindexchanging="GridView_ContractTable_SelectedIndexChanging"><strong>这个onselectedindexchanged是多余的</strong>
         <Columns>
          <asp:TemplateField>
           <ItemTemplate>
            <asp:LinkButton ID="LinkButton_Select" 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>
       </td>
       <td>
        &nbsp;</td>
      </tr>
      <tr>
       <td>
        <asp:GridView ID="GridView_RentTable" runat="server" 
         AutoGenerateColumns="False" DataKeyNames="ContractNumber" 
         DataSourceID="SqlDataSource_RentTable">
         <Columns>
          <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" 
           ReadOnly="True" SortExpression="ContractNumber" />
          <asp:BoundField DataField="FirstRentDate" HeaderText="FirstRentDate" 
           SortExpression="FirstRentDate" />
          <asp:BoundField DataField="EndRentDate" HeaderText="EndRentDate" 
           SortExpression="EndRentDate" />
          <asp:BoundField DataField="AddRent" HeaderText="AddRent" 
           SortExpression="AddRent" />
         </Columns>
        </asp:GridView>
       </td>
       <td>
        &nbsp;</td>
      </tr>
      <tr>
       <td>
        &nbsp;</td>
       <td>
        &nbsp;</td>
      </tr>
      <tr>
       <td>
        &nbsp;</td>
       <td>
        &nbsp;</td>
      </tr>
      <tr>
       <td>
        &nbsp;</td>
       <td>
        &nbsp;</td>
      </tr>
      <tr>
       <td>
        &nbsp;</td>
       <td>
        &nbsp;</td>
      </tr>
      <tr>
       <td>
        &nbsp;</td>
       <td>
        &nbsp;</td>
      </tr>
     </table>
    </asp:Content>
    <asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    </asp:Content>
    
    

     


    -

    ===================后台====================

    -

     

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;
    
    public partial class RentTable_RentModify3 : System.Web.UI.Page
    {
     protected void Page_Load(object sender, EventArgs e)
     {
    
     }
     protected void GridView_ContractTable_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
     {
      string connStr = "Data Source=.;Initial Catalog=长铁物业公司资产数据库;Integrated Security=True";
      SqlConnection cn = new SqlConnection(connStr);
      string ContractNumber = GridView_ContractTable.SelectedValue.ToString();
      //using (SqlConnection conn=new SqlConnection (this.ConnStr));
      //{
      // SqlDataAdapter da=new SqlDataAdapter("Select * from RentTable where ContractNumber ='"+ContractNumber +"'",cn)
      //} 这些注释掉的部分我修改了写法,using(SqlConnection conn =new SqlConnection(this.ConnStr))中的ConnStr下面有红线
      string ContractNumberSelect = "Select * from RentTable where ContractNumber ='" + ContractNumber + "'";
      SqlDataAdapter da = new SqlDataAdapter(ContractNumberSelect, cn);
      DataSet ds = new DataSet();
      da.Fill(ds);
      GridView_RentTable.DataSource = ds;
      GridView_RentTable.DataBind();
    
      //Data Source=.;Initial Catalog=长铁物业公司资产数据库;Integrated Security=True
      //  string connStr = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NorthwindChineseConnectionString"].ConnectionString;
      //protected void gv_ContractTable_SelectedIndexChanged(object sender, EventArgs e)
      //{
      // string ContractNumber = gv_ContractTable.SelectedValue.ToString();//ContractTable的DataKey
      // using (SqlConnection conn = new SqlConnection(this.connStr))
      // {
      // SqlDataAdapter da = new SqlDataAdapter("Select * from RentTable Where ContractNumber = '" + ContractNumber + "'", conn);
      // DataSet ds = new DataSet();
      // da.Fill(ds);
      // gv_RentTable.DataSource = ds;
      // gv_RentTable.DataBind();
      // }
      //}
    
      // }
     }
    }
    

    ============添加了SelectedIndexChanged事件后出现的错误提示==========

     


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月23日 12:25
  •  

     

    呃,小弟提供的两种方法确实只要二选一即可

    这边要补充的是,会发生这个错误是因为

    GridView_ContractTable用错事件

    错误:onselectedindexchanging="GridView_ContractTable_SelectedIndexChanging"

    正确:  onselectedindexchanged="请自行填入名称"

    所以才会造成NullReferenceException


    Shadowと愉快なコード達
    2011年8月23日 13:02
  •     在成功运行的前台代码中我加入了一个Lable、3个TextBox和一个Button,准备给在GridView_RentTable中显示的那个ContractNumber添加新纪录。这些控件分别是Lable_ContractNumber(显示GridView_RentTable中显示的那个ContractNumber)、TextBox_FirstRentDate(首次交租时间,Date类型)、TextBox_EndRentDate(各个月交租的时间,这个时间每个月都会变化一次,Date类型)、TextBox_AddRent(每个月的租金数,decimal(18,2)类型)

    我使用了LinqToSql,给数据库添加数据的方法大致如下:

    RentTable rt = new RentTable { ContractNumber = ..., FirstRentDate = ... };
    myDataContext.RentTable.Add(rt);
    myDataContext.InsertOnSubmit();

     

    但Button的后台代码我写不出来,求补充完整:

    ===============我写好的前台代码================

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default10.aspx.cs" Inherits="Default10" %>
    
    <!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>
     <table cellpadding="0" cellspacing="0" class="style1">
      <tr>
       <td>
        <asp:SqlDataSource ID="SqlDataSource_ContractTable" runat="server" 
         ConnectionString="<%$ ConnectionStrings:长铁物业公司资产数据库ConnectionString %>" 
         SelectCommand="SELECT [ContractNumber], [City], [Road], [Address] FROM [ContractTable]">
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SqlDataSource_RentTable" runat="server" 
         ConnectionString="<%$ ConnectionStrings:长铁物业公司资产数据库ConnectionString %>" 
         SelectCommand="SELECT ContractNumber, FirstRentDate, EndRentDate, AddRent FROM RentTable WHERE (ContractNumber = @ContractNumber)">
         <SelectParameters>
          <asp:ControlParameter ControlID="GridView_ContractTable" Name="ContractNumber" 
           PropertyName="SelectedValue" />
         </SelectParameters>
        </asp:SqlDataSource>
       </td>
       <td>
        &nbsp;</td>
      </tr>
      <tr>
       <td>
        <asp:GridView ID="GridView_ContractTable" runat="server" 
         AutoGenerateColumns="False" DataKeyNames="ContractNumber" 
         DataSourceID="SqlDataSource_ContractTable">
         <Columns>
          <asp:TemplateField>
           <ItemTemplate>
            <asp:LinkButton ID="LinkButton_Select" 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>
       </td>
       <td>
        &nbsp;</td>
      </tr>
      <tr>
       <td>
        <asp:GridView ID="GridView_RentTable" runat="server" 
         AutoGenerateColumns="False" DataKeyNames="ContractNumber" 
         DataSourceID="SqlDataSource_RentTable">
         <Columns>
          <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" 
           ReadOnly="True" SortExpression="ContractNumber" />
          <asp:BoundField DataField="FirstRentDate" HeaderText="FirstRentDate" 
           SortExpression="FirstRentDate" />
          <asp:BoundField DataField="EndRentDate" HeaderText="EndRentDate" 
           SortExpression="EndRentDate" />
          <asp:BoundField DataField="AddRent" HeaderText="AddRent" 
           SortExpression="AddRent" />
         </Columns>
        </asp:GridView>
       </td>
       <td>
        <br />
    &nbsp;
        <asp:Label ID="Label_ContractNumber" runat="server" Text="Label"></asp:Label>
    &nbsp;<br />
        FirstRentDate:<asp:TextBox ID="TextBox_FirstRentDate" runat="server" ></asp:TextBox>
        <br />
        <br />
        EndRentDate:<asp:TextBox ID="TextBox_EndRentDate" runat="server"></asp:TextBox>
        <br />
        AddRent:<asp:TextBox ID="TextBox_AddRent" runat="server"></asp:TextBox>
       </td>
      </tr>
      <tr>
       <td>
        &nbsp;</td>
       <td>
        <asp:Button ID="Button_Submit" runat="server" Text="提交" />
       </td>
      </tr>
      </table>
     </div>
     </form>
    </body>
    </html>
    
    


     


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月23日 13:02
  • 上面还有一贴!求教!

        基本上是这个程序的最后一步了!

    感谢您和Terry大的耐心指点!


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月23日 13:15
  •  

    1. 在GridView_ContractTable的SelectedIndexChanged事件去改變Label_ContractNumber.Text
    2. 插入代码实现如下

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default7.aspx.cs" Inherits="Default7" %>
    
    <!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">
     <table cellpadding="0" cellspacing="0" class="style1">
      <tr>
       <td>
        <asp:SqlDataSource ID="SqlDataSource_ContractTable" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
         SelectCommand="SELECT [ContractNumber], [City], [Road], [Address] FROM [ContractTable]">
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SqlDataSource_RentTable" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
         SelectCommand="SELECT [ContractNumber], [FirstRentDate], [EndRentDate], [AddRent] FROM [RentTable] Where ContractNumber=@ContractNumber" 
          InsertCommand="INSERT INTO [RentTable] ([ContractNumber], [FirstRentDate], [EndRentDate], [AddRent]) VALUES (@ContractNumber, @FirstRentDate, @EndRentDate, @AddRent)"
         >
         <SelectParameters>
         <asp:ControlParameter ControlID="GridView_ContractTable" PropertyName="SelectedValue" Name="ContractNumber"/>
         </SelectParameters>
         <InsertParameters>
          <asp:Parameter Name="ContractNumber" Type="String" />
          <asp:Parameter DbType="Date" Name="FirstRentDate" />
          <asp:Parameter DbType="Date" Name="EndRentDate" />
          <asp:Parameter Name="AddRent" Type="Decimal" />
         </InsertParameters>
        </asp:SqlDataSource>
       </td>
       <td>
        &nbsp;
       </td>
      </tr>
      <tr>
       <td>
        <asp:GridView ID="GridView_ContractTable" runat="server" AutoGenerateColumns="False"
         DataKeyNames="ContractNumber" DataSourceID="SqlDataSource_ContractTable" 
         onselectedindexchanged="GridView_ContractTable_SelectedIndexChanged">
         <Columns>
          <asp:TemplateField>
           <ItemTemplate>
            <asp:LinkButton ID="LinkButton_Select" 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>
       </td>
       <td>
        &nbsp;
       </td>
      </tr>
      <tr>
       <td>
       <!--DataKeyNames请依实际数据库PK做调整-->
        <asp:GridView ID="GridView_RentTable" runat="server" AutoGenerateColumns="False"
         DataKeyNames="ContractNumber,FirstRentDate,EndRentDate,AddRent" 
         DataSourceID="SqlDataSource_RentTable">
         <Columns>
          <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" ReadOnly="True"
           SortExpression="ContractNumber" />
          <asp:BoundField DataField="FirstRentDate" HeaderText="FirstRentDate" 
           SortExpression="FirstRentDate" ReadOnly="True" />
          <asp:BoundField DataField="EndRentDate" HeaderText="EndRentDate" 
           SortExpression="EndRentDate" ReadOnly="True" />
          <asp:BoundField DataField="AddRent" HeaderText="AddRent" 
           SortExpression="AddRent" ReadOnly="True" />
         </Columns>
        </asp:GridView>
       </td>
       <td>
        <br />
        &nbsp;
       </td>
      </tr>
      <tr>
       <td>
    
       
         ContractNumber:
          <asp:Label ID="Label_ContractNumber" runat="server" Text='<%# Eval("ContractNumber") %>'></asp:Label>
         &nbsp;<br />
    
     FirstRentDate:<asp:TextBox ID="TextBox_FirstRentDate" runat="server" ></asp:TextBox>
     <br />
     <br />
    
     EndRentDate:<asp:TextBox ID="TextBox_EndRentDate" runat="server"></asp:TextBox>
     <br />
     AddRent:<asp:TextBox ID="TextBox_AddRent" runat="server"></asp:TextBox>
    
          <asp:Button ID="Button_Submit" runat="server" Text="提交" onclick="Button_Submit_Click" />
    
       </td>
       <td>
        &nbsp;
       </td>
      </tr>
     </table>
     </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 Default7 : System.Web.UI.Page
    {
    
     protected void Page_Load(object sender, EventArgs e)
     {
    
      
    
     }
    
    
    
     protected void Button_Submit_Click(object sender, EventArgs e)
     {
    
      string ContractNumber = Label_ContractNumber.Text;
      string FirstRentDate = TextBox_FirstRentDate.Text;
      string EndRentDate =TextBox_EndRentDate.Text;
      string AddRent = TextBox_AddRent.Text;
    
    
      //Linq to SQL Insert: http://msdn.microsoft.com/zh-cn/library/bb386941.aspx#Y376
    
      MyContextDataContext myDataContext = new MyContextDataContext();
    
      RentTable rt = new RentTable { ContractNumber = ContractNumber, FirstRentDate = Convert.ToDateTime(FirstRentDate),
              EndRentDate=Convert.ToDateTime(EndRentDate),AddRent=Convert.ToDecimal(AddRent) };
      myDataContext.RentTable.InsertOnSubmit(rt);
      myDataContext.SubmitChanges();
    
    
    
      GridView_RentTable.DataBind();
     }
    
    
    
     protected void GridView_ContractTable_SelectedIndexChanged(object sender, EventArgs e)
     {
      Label_ContractNumber.Text = GridView_ContractTable.SelectedValue.ToString();
     }
    
    }
    

     

     


     

    Shadowと愉快なコード達


    2011年8月23日 14:06
  • 还没来得及测试版主怎么就标记为答复了啊!?我自己会标记答复的!
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月25日 4:14
  • 你好!

    我这前给了你一完整的示例,已解决了的上述问题,你现在还什么其它问题吗?

    http://social.microsoft.com/Forums/zh-CN/295/thread/d7e4eace-eaf4-448a-bf13-47b8aff9f2c6


    知识改变命运,奋斗成就人生!
    2011年8月25日 4:52
    版主
  •     用ASP.NET前台代码来写我看得比较懂,感谢您上次提供的C#代码,这个帖子的几篇回复对我帮助挺大,我都是按照专家提供的例子自己动手测试成功了才标记答复,而且我经常会提出后续的新问题,所以我取消了您的‘标记为答复’,Sorry,请见谅!!!
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月25日 5:40
  •       我尝试了您提供的代码,修改了后台代码的SqlToLinq部分,可以完美运行。目前又发现两个新问题!

        问题1:我想在点击ContractTable中的ContractNumber时,鼠标能跳到GridView_RentTable所显示的数据行的最后一行的位置,或者跳到TextBox_FirstRentDate的位置,方便操作!我猜想应该还是在SelectedIndexChanged事件里编写,具体应该怎么写呢?

    -

        问题2:我希望TextBox_FirstRentDate 的数据能自动从上一个FirstRentDate获得数据,减少工作量,这个又该怎么写呢?再扩展一下,如果从GridView_ContractTable传个参数比如City到 某一个Textbox中,又该怎么写呢?我猜想应该使用Session之类的吧?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月25日 11:11
  •       我尝试了您提供的代码,修改了后台代码的SqlToLinq部分,可以完美运行。目前又发现两个新问题!

        问题1:我想在点击ContractTable中的ContractNumber时,鼠标能跳到GridView_RentTable所显示的数据行的最后一行的位置,或者跳到TextBox_FirstRentDate的位置,方便操作!我猜想应该还是在SelectedIndexChanged事件里编写,具体应该怎么写呢?

    -

        问题2:我希望TextBox_FirstRentDate 的数据能自动从上一个FirstRentDate获得数据,减少工作量,这个又该怎么写呢?再扩展一下,如果从GridView_ContractTable传个参数比如City到 某一个Textbox中,又该怎么写呢?我猜想应该使用Session之类的吧?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!


    您好~

    此帖有三个回覆者,代码版本有三种,您这样问还真不知道是问哪个版本的问题^_^"

    这边就再以小弟提的例子来改写好了

    问题1:我想在点击ContractTable中的ContractNumber时,鼠标能跳到GridView_RentTable所显示的数据行的最后一行的位置,或者跳到TextBox_FirstRentDate的位置,方便操作!我猜想应该还是在SelectedIndexChanged事件里编写,具体应该怎么写呢?

    写在SelectedIndexChanged事件裡沒錯! 鼠标要跳到TextBox_FirstRentDate的位置的話,只要再叫用

    TextBox_FirstRentDate.Focus();

    就可以了

    问题2:我希望TextBox_FirstRentDate 的数据能自动从上一个FirstRentDate获得数据,减少工作量,这个又该怎么写呢?再扩展一下,如果从GridView_ContractTable传个参数比如City到 某一个Textbox中,又该怎么写呢?我猜想应该使用Session之类的吧?

    您一选取ContractTable时候,在SelectedIndexChanged事件里可以取得该表的PK,既然有PK,您就可以依此获得数据的相关资讯来进一步操作

    还有,上一个FirstRentDate的数据这要看您怎么定义它

    这边我就当作以FirstRentDate descending排序方式来取得上一笔的数据

      protected void GridView_ContractTable_SelectedIndexChanged(object sender, EventArgs e)
      {
        string ContractNumber = GridView_ContractTable.SelectedValue.ToString();
        Label_ContractNumber.Text = ContractNumber;
        TextBox_FirstRentDate.Focus();
    
        MyContextDataContext myDataContext = new MyContextDataContext();
        var result = from r in myDataContext.RentTable
               where r.ContractNumber == ContractNumber
               orderby r.FirstRentDate descending
               select r;
        RentTable lastRent = null;
        foreach (var item in result)
        {
          lastRent = item;//取得上一筆數據
          break;
        }
        TextBox_FirstRentDate.Text = lastRent.FirstRentDate.ToString("yyyy/MM/dd");
        
      }
    


     

    为了让后续的人可以跟得上讨论,小弟这边提供模拟数据的SQL语句

     

     
    /****** Object: Table [dbo].[RentTable]  Script Date: 08/25/2011 20:38:21 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[RentTable](
    	[ContractNumber] [varchar](50) NOT NULL,
    	[FirstRentDate] [date] NOT NULL,
    	[EndRentDate] [date] NOT NULL,
    	[AddRent] [decimal](18, 2) NOT NULL,
     CONSTRAINT [PK_RentTable] PRIMARY KEY CLUSTERED 
    (
    	[ContractNumber] ASC,
    	[FirstRentDate] ASC,
    	[EndRentDate] ASC,
    	[AddRent] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    SET ANSI_PADDING OFF
    GO
    INSERT [dbo].[RentTable] ([ContractNumber], [FirstRentDate], [EndRentDate], [AddRent]) VALUES (N'1', CAST(0x95230B00 AS Date), CAST(0x96230B00 AS Date), CAST(999.00 AS Decimal(18, 2)))
    INSERT [dbo].[RentTable] ([ContractNumber], [FirstRentDate], [EndRentDate], [AddRent]) VALUES (N'1', CAST(0x75250B00 AS Date), CAST(0x93250B00 AS Date), CAST(10.00 AS Decimal(18, 2)))
    INSERT [dbo].[RentTable] ([ContractNumber], [FirstRentDate], [EndRentDate], [AddRent]) VALUES (N'2', CAST(0x4D910500 AS Date), CAST(0x47940500 AS Date), CAST(200.00 AS Decimal(18, 2)))
    /****** Object: Table [dbo].[ContractTable]  Script Date: 08/25/2011 20:38:21 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[ContractTable](
    	[ContractNumber] [varchar](50) NOT NULL,
    	[City] [varchar](50) NULL,
    	[Road] [varchar](50) NULL,
    	[Address] [varchar](50) NULL,
    PRIMARY KEY CLUSTERED 
    (
    	[ContractNumber] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    SET ANSI_PADDING OFF
    GO
    INSERT [dbo].[ContractTable] ([ContractNumber], [City], [Road], [Address]) VALUES (N'1', N'北京', N'北京路', N'北京地址')
    INSERT [dbo].[ContractTable] ([ContractNumber], [City], [Road], [Address]) VALUES (N'2', N'雲南', N'雲南路', N'雲南地址')
    
    


     


    Shadowと愉快なコード達
    2011年8月25日 12:31
  •  

     protected void GridView_ContractTable_SelectedIndexChanged(object sender, EventArgs e)
     {
     string ContractNumber = GridView_ContractTable.SelectedValue.ToString();
     Label_ContractNumber.Text = ContractNumber;
     TextBox_FirstRentDate.Focus();
    
     MyContextDataContext myDataContext = new MyContextDataContext();
     var result = from r in myDataContext.RentTable
       where r.ContractNumber == ContractNumber
       orderby r.FirstRentDate descending
       select r;
     RentTable lastRent = null;
     foreach (var item in result)
     {
      lastRent = item;//取得上一筆數據
      break;
     }
     TextBox_FirstRentDate.Text = lastRent.FirstRentDate.ToString("yyyy/MM/dd");
     
     }
    

     

    问题1:一直存在的疑问就是黑体字那句,MyContextDataContext我怎么没这个类,?

    我只能改用

    RentTable myRT=new RentTable();

    ..........................

     

    DataClassesDataContext db = new DataClassesDataContext();

                db.Renttable.InsertOnSubmit(myRT);

                db.SubmitChanges();

    -

    问题2:能否注释一下,看起来有点像SQL语句,暂时还没接触过这种写法的!

    特别是RentTable lastRent = null; 这一句!

    ----------

       MyContextDataContext myDataContext = new MyContextDataContext();

     var result = from r in myDataContext.RentTable
       where r.ContractNumber == ContractNumber
       orderby r.FirstRentDate descending
       select r;
     RentTable lastRent = null;
     foreach (var item in result)
     {
      lastRent = item;//取得上一筆數據
      break;
     }

     


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月25日 13:44
  • protected void GridView_ContractTable_SelectedIndexChanged(object sender, EventArgs e)
     {
      string ContractNumber = GridView_ContractTable.SelectedValue.ToString();
      Label_ContractNumber.Text = ContractNumber;
      TextBox_FirstRentDate.Focus();
      /*以下用Linq to SQL实现,MyContextDataContext是我自己命名的*/
      /*MyContextDataContext应该相当于您的DataClassesDataContext类*/
      MyContextDataContext myDataContext = new MyContextDataContext();
      var result = from r in myDataContext.RentTable
          where r.ContractNumber == ContractNumber
          orderby r.FirstRentDate descending
          select r;
      RentTable lastRent = null;/*先准备一个RentTable类的变量,待以下回圈遍历完后,此变量自然就会有值了*/
      foreach (var item in result)
      {
       lastRent = item;//取得上一笔数据物件
      break;
      }
      TextBox_FirstRentDate.Text = lastRent.FirstRentDate.ToString("yyyy/MM/dd");
      
     }
    
     
    
    
    


    Shadowと愉快なコード達
    2011年8月25日 13:57
  • foreach (var item in result)
     {
      lastRent = item;//取得上一笔数据物件
     break;
     }

      还有点疑问,一直以为foreach是用来得到很多个数的集合,但这里似乎是用来得到最后一行的数据。不知道我理解正确否?
      要得到最新的数据,要用descending 来考虑数据排列的方向!假如是ASC排序,就会得到最老的数据行,是这样理解的吧?

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月25日 14:14
  • 是的,您的思路是正確的,要對自己有信心

    小弟發現您很用功^_^


    Shadowと愉快なコード達
    2011年8月25日 14:19
  •     谢谢您的及时回复!我可以安心睡觉了!明天再测试!

    这个帖子好长,终于可以结了!

        再次感谢!

     


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月25日 14:26