none
应该是类型转换除了问题,请帮忙看看! RRS feed

  • 问题

  •     直接发2个东东!问题是出在后台代码上!就是把ContractTable 上某个数据筛选后传到TextBox上

        1-错误信息!

     

        2-后台代码!

    -

    ================1-错误信息!==================

     

     

    -

    =================后台代码====================

     

    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_RentModify : System.Web.UI.Page
    {
     protected void Page_Load(object sender, EventArgs e)
     {
    
     }
     //给Label_ContractNumber赋值,同一页传参
     protected void GridView_ContractTable_SelectedIndexChanged(object sender, EventArgs e)
     {
      //Label_ContractNumber.Text = GridView_ContractTable.SelectedValue.ToString();
      DataClassesDataContext db = new DataClassesDataContext();
    
      string ContractNumber =GridView_ContractTable. SelectedValue.ToString();
      string City = GridView_ContractTable.SelectedRow.Cells[2].Text;
      string Road = GridView_ContractTable.SelectedRow.Cells[3].Text;
      string Address = GridView_ContractTable.SelectedRow.Cells[4].Text;
      string MonthRent = GridView_ContractTable.SelectedRow.Cells[10].Text;
      string CRA = City + Road + Address;
      Label_ContractNumber.Text = ContractNumber;
      Label_City.Text = CRA;
      //Label_Road.Text = Road;
      //Label_Address.Text = Address;
      Label_CMonthRent.Text = MonthRent;
      TextBox_NowMonthDate.Focus();
    
      //MyContextDataContext myDataContext = new MyContextDataContext();
      var result = from r in db.RentTable
          where r.ContractNumber == ContractNumber
          orderby r.NowMonthDate descending
          select r;
      RentTable lastRent = null;
      foreach (var item in result)
      {
       lastRent = item;//取得上一筆數據
       break;
      }
    
      //下面两句都不对!!!
      TextBox_FirstRentDate.Text = lastRent.FirstRentDate.ToString("yyyy/MM/dd");
      //TextBox_FirstRentDate.Text = Convert.ToDateTime(lastRent.FirstRentDate).ToString("yyyy/MM/dd");
    
     }
    
    
     protected void Button_Submit_Click(object sender, EventArgs e)
     {
      DataClassesDataContext db = new DataClassesDataContext();
      RentTable myrt = new RentTable();
      //RentTable的各个数据
      myrt.ContractNumber = Label_ContractNumber.Text.ToString();
      myrt.FirstRentDate =Convert .ToDateTime ( TextBox_FirstRentDate.Text);
      myrt.NowMonthDate = Convert.ToDateTime(TextBox_FirstRentDate.Text);
      myrt.NowMonthRent = decimal.Parse(TextBox_NowMonthRent.Text);
      myrt.RealityMonthRent = decimal.Parse(TextBox_RealityMonthRent.Text);
      myrt.MonthRentRemarks = TextBox_MonthRentRemarks.Text.ToString ();
      if (TextBox_EndRentDate.Text!="")
      myrt.EndRentDate = Convert.ToDateTime(TextBox_EndRentDate.Text);
    
      //Linq to SQL Insert: http://msdn.microsoft.com/zh-cn/library/bb386941.aspx#Y376
      //MyContextDataContext myDataContext = new MyContextDataContext();
      
    
      //RentTable rt = new RentTable
      //{
      // string ContractNumber = Label_ContractNumber.Text;
      //DateTime FirstRentDate =Convert .ToDateTime ( TextBox_FirstRentDate.Text);
      //DateTime NowMonthDate = Convert.ToDateTime(TextBox_EndRentDate .Text );
      //decimal NowMonthRent = decimal.Parse(TextBox_NowMonthDate.Text);
      //decimal RealityMonthRent = decimal.Parse(TextBox_RealityMonthRent.Text);
      //string MonthRentRemarks = TextBox_MonthRentRemarks.Text;
      //DateTime EndRentDate = Convert.ToDateTime(TextBox_EndRentDate.Text);
      //};
      db.RentTable.InsertOnSubmit(myrt);
      db.SubmitChanges();
      GridView_RentTable.DataBind();
     }
    
    
    }
    
    


     

     


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

答案

全部回复

  • 不知道是不是只有我的問題,圖片似乎看不到
    Shadowと愉快なコード達
    2011年8月28日 12:55

  • C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月28日 13:20
  • 通常有此錯誤,應該是lastRent.FirstRentDate的類型為object,而不是Date或DateTime(時間類型)

    能否幫忙一下

    GridView_ContractTable_SelectedIndexChanged事件裡把

     //下面两句都不对!!!
      TextBox_FirstRentDate.Text = lastRent.FirstRentDate.ToString("yyyy/MM/dd");
      //TextBox_FirstRentDate.Text = Convert.ToDateTime(lastRent.FirstRentDate).ToString("yyyy/MM/dd");

    先暫時改成

    Response.Write(lastRent.GetType().ToString() + "<hr/>");

    Response.Write(lastRent.FirstRentDate.GetType().ToString() + "<hr/>");

    Response.Write(lastRent.FirstRentDate + "<hr/>");

    這三句,先查看一下這三個輸出是什麼值,好進一步調試

     


    Shadowと愉快なコード達

    2011年8月28日 13:42
  • 好的!明天我去单位调试!晚上回帖!谢谢了!

     


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月28日 13:49
  • 看起來是因為lastRent為null或是lastRentDate的屬性值為null所造成的錯誤,建議在把lastRentDate屬性設定給TextBox_FirstRentDate.Text前,可以多做以下判斷:

    if (lastRent != null)
     TextBox_FirstRentDate.Text = lastRent.FirstRentDate.ToString("yyyy/MM/dd");



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月29日 1:05
  • =======   是这个样子==========


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

    ========


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

    請試試

     TextBox_FirstRentDate.Text =  lastRent.FirstRentDate.HasValue ?  lastRent.FirstRentDate.Value.ToString("yyyy/MM/dd") : "1999/1/1";




    Shadowと愉快なコード達


    2011年8月29日 11:20
  •  TextBox_FirstRentDate.Text =  lastRent.FirstRentDate.HasValue ?  lastRent.FirstRentDate.Value.ToString("yyyy/MM/dd") : "1999/1/1";

    第一句后面不用‘;’结尾么?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月29日 12:28
  • 請問你原本用下列程式碼可以通過建置?

    TextBox_FirstRentDate.Text = lastRent.FirstRentDate.ToString("yyyy/MM/dd");
    



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月29日 12:33
  •  TextBox_FirstRentDate.Text =  lastRent.FirstRentDate.HasValue ?  lastRent.FirstRentDate.Value.ToString("yyyy/MM/dd") : "1999/1/1";

    第一句后面不用‘;’结尾么?

    有';' 的

    TextBox_FirstRentDate.Text =  lastRent.FirstRentDate.HasValue ?  lastRent.FirstRentDate.Value.ToString("yyyy/MM/dd") : "1999/1/1"; //在最后面

    如果您数据表里该字段有可能NULL值的话,就要用以上写法


    Shadowと愉快なコード達
    2011年8月29日 12:36
  • 谢谢!明天去单位试试!家里没这个程序!
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月29日 12:38
  • 不能通过啊!得到3楼的截图!

    原来我下面两种写法都试了不行!!!

     

     //下面两句都不对!!!
     TextBox_FirstRentDate.Text = lastRent.FirstRentDate.ToString("yyyy/MM/dd");
     //TextBox_FirstRentDate.Text = Convert.ToDateTime(lastRent.FirstRentDate).ToString("yyyy/MM/dd");
    

     


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月29日 13:20
  • 如果我沒記錯的話,只有DateTime資料型別才可以用ToString("yyyy/MM/dd")。

    我用下列的TABLE來模擬你的情況,你可以用下面這樣的寫法來設定日期格式。

     

    if (lastRent != null)
     TextBox_FirstRentDate.Text = Convert.ToDateTime(lastRent.FirstRentDate.ToString()).ToString("yyyy/MM/dd");
    


     


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/



    2011年8月29日 13:29
  • 我试了,错误截图在下面:

    ============


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

  • 我试了,错误截图在下面:

    ============


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

    此討論串看下來,似乎

    1.  TextBox_FirstRentDate.Text = lastRent.FirstRentDate.ToString("yyyy/MM/dd");
       TextBox_FirstRentDate.Text = Convert.ToDateTime(lastRent.FirstRentDate).ToString("yyyy/MM/dd");
    2. TextBox_FirstRentDate.Text =  lastRent.FirstRentDate.HasValue ?  lastRent.FirstRentDate.Value.ToString("yyyy/MM/dd") : "1999/1/1"

      都會報錯?

    那改回寫ADO.net 總可以了吧

     

     

    /*先引入以下三個空間*/
    using System.Web.Configuration;
    using System.Data.SqlClient;
    using System.Data;
    
    
    
    
    
    
    
    //您的連線字符串
     string connString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    
    protected void GridView_ContractTable_SelectedIndexChanged(object sender, EventArgs e)
     {
    
     DataClassesDataContext db = new DataClassesDataContext();
    
     string ContractNumber =GridView_ContractTable. SelectedValue.ToString();
    
       using (SqlConnection conn=new SqlConnection(this.connString))
      {
    
       //取得上一筆數據
       SqlCommand cmd = new SqlCommand("Select Top 1 Convert(varchar,FirstRentDate,111) As FirstRentDate From RentTable Where ContractNumber= '"+ContractNumber+"' Order by NowMonthDate DESC", conn);
       conn.Open();
       object result = cmd.ExecuteScalar();
       conn.Close();
       TextBox_FirstRentDate.Text = result.ToString();
    
      }
     }
    

    Shadowと愉快なコード達

    2011年8月30日 13:16



    1. TextBox_FirstRentDate.Text =  lastRent.FirstRentDate.HasValue ?  lastRent.FirstRentDate.Value.ToString("yyyy/MM/dd") : "1999/1/1"


    这个是对的!忘记说了 !不好意思!
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月30日 14:30



    1. TextBox_FirstRentDate.Text =  lastRent.FirstRentDate.HasValue ?  lastRent.FirstRentDate.Value.ToString("yyyy/MM/dd") : "1999/1/1"


    这个是对的!忘记说了 !不好意思!
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    老兄

    記得標解答阿,我都誤會了XD


    Shadowと愉快なコード達
    2011年8月30日 14:34
  •     FirstRentDate  设置成 Varchar(10)确实可以!但我要用FirstRentDate来做日期方面的运算就会麻烦一些吧!?
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月30日 14:34
  •     FirstRentDate  设置成 Varchar(10)确实可以!但我要用FirstRentDate来做日期方面的运算就会麻烦一些吧!?
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    您誤會我的意思了,我只是用varchar(10)來模擬您的Table Schema,以嘗試找到問題點,您FirtRentDate是什麼資料型態呢?
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月31日 1:46
  • FirtRentDate 是SQL数据库中的Date类型!
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月31日 12:44
  • lastRent.FirstRentDate.HasValue ?  lastRent.FirstRentDate.Value.ToString("yyyy/MM/dd") : "1999/1/1"

     

    其实我不懂!

    HasValue ?这个属性第一次接触!而对于后面的

     

     

    ("yyyy/MM/dd") : "1999/1/1";

     

     

     

    不很明白!特别是那个

     :  号是什么意思来的?


     


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月31日 12:46
  • lastRent.FirstRentDate.HasValue ?  lastRent.FirstRentDate.Value.ToString("yyyy/MM/dd") : "1999/1/1"

     

    其实我不懂!

     :  号是什么意思来的?


     

     

    HasValue ?这个属性第一次接触!而对于后面的

     

     

     

     

    不很明白!特别是那个

     

     

    ("yyyy/MM/dd") : "1999/1/1";


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


    三元运算符

    http://msdn.microsoft.com/zh-cn/library/ms173145.aspx

    意思跟以下一樣

    if(lastRent.FirstRentDate.HasValue)

    {

      lastRent.FirstRentDate.Value.ToString("yyyy/MM/dd");

    }else

    {

      "1999/1/1";

    }


    Shadowと愉快なコード達
    2011年8月31日 15:49
  • 三元运算符!想起来了!谢谢!我懂了!
    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年9月1日 0:18