protected DataBase DB;//这是一个数据库操作封装类
protected SqlConnection Conn;
protected DataSet DS;
protected SqlDataAdapter DA;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string StrSql;
if (!IsPostBack)
{
DB = new DataBase();
DS = new DataSet();
StrSql = "select * from Prjct where Pass = 'Pass'";
DS = DB.RunProc(StrSql,DS,"Prjct");
DGPrjct.DataSource = DS.Tables["Prjct"].DefaultView;
DGPrjct.DataBind();
TextBox1.Text = DS.Tables["Prjct"].DefaultView[1]["PrjctName"].ToString();//这一行在这里是正确的
}
}
private void Button5_Click(object sender, System.EventArgs e)
{
TextBox1.Text = DS.Tables["Prjct"].DefaultView[1]["PrjctName"].ToString();//为什么在这里就不正确了:出错信息是:未将对象引用设置到对象的实例。   我的DS是全局变量啊,在Page_Load中已经实例化了啊}上边就是我的问题。  我的最终目的就是:点击datagrid,textbox可以获取值,获取的方式通过‘数据库字段名’ 而不是通过datagrid.selectItem.cells[不是通过在这里写整数].text

解决方案 »

  1.   

    变量在页面刷新之后是不会被保存下来的,楼主首先要搞清楚asp.net到底是怎么运作的
      

  2.   

    回复人: Eddie005(♂) 暴赱 (^o^) ( ) 信誉:118  2005-08-19 15:17:00  得分: 0  
     
     
       变量在页面刷新之后是不会被保存下来的,楼主首先要搞清楚asp.net到底是怎么运作的
      
     
    Top  
    太感谢了!  :)
      

  3.   

    Eddie005(♂) 暴赱 (^o^)    说的对
    刷新以后变量不会保存,楼主点击按钮事件会再Page_Load(object sender, System.EventArgs e)一遍而此时不会执行if (!IsPostBack)里面的内容,也就是”DS“未将对象引用设置到对象的实例
      

  4.   

    因为PostBack以后DataSet中的东西都丢失了,并没有在StateView中再传回来。
    就是这个问题,楼主可以想想怎么改~  ^^
      

  5.   

    回复人: renyu732(任宇) ( ) 信誉:100  2005-08-19 15:19:00  得分: 0  
     
     
       e.item.findControl("TextBox1")
      请问这是什么意思?
    private void Button5_Click(object sender, System.EventArgs e)
    {
      e.item.findControl("TextBox1");//这样子就报错。}
      

  6.   

    是查找你DataGrid 模板列名为TextBox1的控件
      

  7.   

    我想大概你学.NET不久吧,多了解一下请问这是什么意思?
    private void Button5_Click(object sender, System.EventArgs e)
    {
      e.item.findControl("TextBox1");//这样子就报错。}
    怎么可能在这个事件里运行到这句e....这句捏.肯定是错的.这里按钮的CLICK事件e参数怎么可能会带有DATAGRID的参数形式呢,
    你先说说你需要做到功能..
      

  8.   

    回复人: zjw2004112(风之影) ( ) 信誉:100  2005-08-19 16:06:00  得分: 0  
     
     
       是查找你DataGrid 模板列名为TextBox1的控件
      
     
    我没有用模板列,全部用的是绑定列。我的最终目的就是:点击datagrid,textbox可以获取值,获取的方式通过‘数据库字段名’ 而不是通过datagrid.selectItem.cells[不是通过在这里写整数].text,请教一下该怎么样做。
    (现在有种方法如下:但要查询数据库,有没有更直接的)
    private void DGPrjct_SelectedIndexChanged(object sender, System.EventArgs e)
    SqlDataReader DR;
    string StrSelect,StrSql;
    StrSelect = DGPrjct.SelectedItem.Cells[2].Text;
    StrSql = "select * from prjct where PrjctNo = '" + StrSelect +"'";
    DR = DB.RunProcGetReader(StrSql);
    dr.read();
    TextBox1.Text = DR["PrjctName"].ToString();
    TextBox2.Text = DR["PrjctNo"].ToString();
    TextBox3.Text = DR["OrderNo"].ToString();
      

  9.   

    你记住数据库中"PrjctName","PrjctNo","OrderNo"在DataGrid中的位置不就行了吗?
    就可以通过
    datagrid.selectItem.cells[你要的字段对应的序号].text
    获取数据了
      

  10.   

    建议用e.item.findControl("TextBox1");
      

  11.   

    button点击时间是不会触发itemcommand的,看看你是用什么样的datagrid列了,一般修改都是多方放入一个asp:textbox,但是好像搂主第一下就放入了 asp:textbox,这时候有e.item.findControl("Textbox1")吗,如果button5.click()的话,现声明一个DataGridItem,然后再遍历datagrid.items
    然后datagridItem.FindControl("textbox1"),textbox txt=datagridItem.FindControl("textbox1"),
      

  12.   

    回复人: skyfarwolf(Computer) ( ) 信誉:100  2005-8-21 0:47:09  得分: 0    
    你记住数据库中"PrjctName","PrjctNo","OrderNo"在DataGrid中的位置不就行了吗?
    就可以通过
    datagrid.selectItem.cells[你要的字段对应的序号].text
    获取数据了  
    但当有20个字段的时候就很容易出错了。
      

  13.   

    谢谢大家这么关心,心里边挺感感的!
    我现在解决了
    public void GridBndTwo()///用户只能看见自己下的单
    {
    string StrSql,StrSelect;
    DataSet DS = new DataSet();
    StrSelect = DGPrjct.SelectedItem.Cells[2].Text;
    DataBase DB = new DataBase();
    SqlConnection Conn = DB.ReturnConn();
    StrSql = "select * from Stuff where PrjctNo = @PrjctNo And CrtMan = @CrtMan";
    SqlDataAdapter DA = new SqlDataAdapter(StrSql , Conn);
    DA.SelectCommand.Parameters.Add("@PrjctNo",SqlDbType.NVarChar,50);
    DA.SelectCommand.Parameters.Add("@CrtMan",SqlDbType.NVarChar,50);
    DA.SelectCommand.Parameters["@PrjctNo"].Value = StrSelect;
    DA.SelectCommand.Parameters["@CrtMan"].Value = Session["Uname"].ToString();
    try
    {
    DA.Fill(DS,"Stuff");
    }
    catch(Exception Err)
    {
    throw Err;
    }
    DGStuff.DataSource = DS.Tables["Stuff"].DefaultView;
    DGStuff.DataBind();
    Session["DS"] = DS;  //把dataset存在session里边TxtPrjct.Text = DGPrjct.SelectedItem.Cells[1].Text;
    TxtPrjctNo.Text = DGPrjct.SelectedItem.Cells[2].Text;
    }
    private void DGStuff_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    DwnLstStuffType.SelectedIndex = 0;
    DwnLstType.SelectedIndex = 0;
    DataSet DS = (System.Data.DataSet) Session["DS"];///在这里取出来
    int IntSelect;
    IntSelect = DGStuff.SelectedIndex;TxtPrjct.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["PrjctName"].ToString();
    TxtPrjctNo.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["PrjctNo"].ToString();
    TxtSNo.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["SNo"].ToString();
    TxtToData.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["ToData"].ToString();
    DwnLstType.SelectedItem.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["ListType"].ToString();
    DwnLstStuffType.SelectedItem.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["StuffType"].ToString();
    TxtCrtMan.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["CrtMan"].ToString();
    TxtCrtTime.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["CrtTime"].ToString();
    TxtMdfMan.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["MdfMan"].ToString();
    TxtMdfTime.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["MdfTime"].ToString();
    TxtReason.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["Reason"].ToString();
    TxtExplain.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["Explain"].ToString();
    TxtRe.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["Re"].ToString();
    TxtAddMoney.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["AddMoney"].ToString();
    TxtDelay.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["Delay"].ToString();
    TxtSelfRe.Text = DS.Tables["Stuff"].DefaultView[IntSelect]["SelfRe"].ToString();

    }
      

  14.   

    回复人: hackate(兰花开香入梦境,独思佳人亦飘然!!) ( ) 信誉:106  2005-8-19 16:13:50  得分: 0  
     
     
       
    我想大概你学.NET不久吧,多了解一下请问这是什么意思?
    private void Button5_Click(object sender, System.EventArgs e)
    {
      e.item.findControl("TextBox1");//这样子就报错。}
    怎么可能在这个事件里运行到这句e....这句捏.肯定是错的.这里按钮的CLICK事件e参数怎么可能会带有DATAGRID的参数形式呢,
    你先说说你需要做到功能..  
     
    我就是当点击datagrid时,把点击的记录读到textbox中,但不想通过
    datagrid.selectItem.cell[整数].tostring, 通这这种整数这种方式,因为字段多了容易出错,请问你是怎么做的呢?