dsQuyMst.Tables["QuyMst"].Rows[0]["SHDOCO"] = "1111";//这句报错(未将对象引用设置到对象的实例。)
这知道是什么原因?
高人指点~~~using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Collections.Generic;public partial class P81001A : System.Web.UI.Page
{
    DataSet dsQuyMst;
   // SqlDataAdapter da;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            LoadData();
        }
        //Menu1_MenuItemClick(object,e);
        //DropDownList1_SelectedIndexChanged(object,e);
        
    }    private void LoadData()
    {
        DataSet ds = new DataSet();//
        SqlConnection con = new SqlConnection();
        con.ConnectionString = GetConnectionStr();
        con.Open();
        string strsql = "select SHTYPENO,SHTYPENAME from f81101";
        SqlCommand sqlcmd = new SqlCommand(strsql, con);
        //SqlDataReader dr = sqlcmd.EndExecuteReader();// new SqlDataReader();
        SqlDataAdapter da = new SqlDataAdapter(sqlcmd);
        da.Fill(ds, "bustype");
        
        for (int i = -1; i <= ds.Tables["bustype"].Rows.Count - 1; i++)
        {
            ListItem litem = new ListItem();
            if (i == -1)
            {
                litem.Text = "请选择商品类型";
                litem.Value = "";
                DropDownList1.Items.Add(litem);
            }
            else
            {
                litem.Text = ds.Tables[0].Rows[i][1].ToString();
                litem.Value = ds.Tables[0].Rows[i][0].ToString();
                DropDownList1.Items.Add(litem);
            }
        }
        strsql = "select * from f81111";
        sqlcmd.CommandText = strsql;
        da.SelectCommand = sqlcmd;
        da.Fill(ds, "aa");  //外包或自有
        for (int i = 0; i <= ds.Tables["aa"].Rows.Count - 1; i++)
        {
            ListItem litem = new ListItem();
            litem.Text = ds.Tables["aa"].Rows[i][1].ToString();
            litem.Value = ds.Tables["aa"].Rows[i][0].ToString();
            DropDownList2.Items.Add(litem);
        }        DropDownList1.DataBind();
        DropDownList2.DataBind();
        //售后单主表
        strsql = "select * from f81001 where 1=2";
        sqlcmd.CommandText = strsql;
        da.SelectCommand = sqlcmd;
        dsQuyMst = new DataSet();
        da.Fill(dsQuyMst, "QuyMst");
        DataTable dt = new DataTable();
        dt = dsQuyMst.Tables["QuyMst"];
        DataRow dr;
        dr = dt.NewRow();
        //dr["SHKCOO"]="00888";
        //dr["SHDOCO"] = "";
        dt.Rows.Add(dr);
        FormView1.DataSource = dsQuyMst.Tables["QuyMst"];
        FormView1.DataBind();
        //手机表
                con.Close();
    }
    private static string GetConnectionStr()
    {
        string ss = ConfigurationManager.ConnectionStrings["SHMISConnectionString2"].ConnectionString.ToString();
        // con.ConnectionString = ss;
        return ss;
    }
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        //if (DropDownList1.SelectedValue == "A1")
        //{        //     List<MenuItem> listm = new List<MenuItem>();//创建类列表,用于保存移除的菜单项            
        //    listm.Add(Menu1.Items[1]);
        //    //移动listm中的菜单项
        //    foreach (MenuItem m in listm)
        //    {
        //      Menu1.Items.Remove(m);
        //    }
        //}
    }
    protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
    {    
        int index = int.Parse(e.Item.Value);
        this.MultiView1.ActiveViewIndex = index;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string constr=GetConnectionStr();
        SqlConnection con=new SqlConnection(constr);
        con.Open();   
        SqlCommand sqlcmd = new SqlCommand("SP_GenerateDocNoF0905", con);
        // 设置SqlCommand的属性为存储过程
        sqlcmd.CommandType = CommandType.StoredProcedure;
        sqlcmd.Parameters.Add("@Dct", SqlDbType.Char, 2);
        sqlcmd.Parameters.Add("@Doco", SqlDbType.Int, 8);
       //set return value direction 
        sqlcmd.Parameters["@Dct"].Direction=ParameterDirection.Input;
        sqlcmd.Parameters["@Doco"].Direction = ParameterDirection.Output;
        // 返回值
        sqlcmd.Parameters["@Dct"].Value = "1S";
        int rowsAffected = sqlcmd.ExecuteNonQuery();//行影响值
        //int result = sqlcmd.parameters["Returnvalue"].value;//存储过程返回值
        int newID = int.Parse( sqlcmd.Parameters["@Doco"].Value.ToString());
        //功能挺强的吧,可以得到三个值,分别是行影响值,存储过程返回值,新的ID值。        dsQuyMst.Tables["QuyMst"].Rows[0]["SHDOCO"] = "1111";//这句报错(未将对象引用设置到对象的实例。)
       
        Response.Write("Doco:" + newID.ToString());    }
    private void UpdateData()
    {        UpdateQuyMst(dsQuyMst);    }
    private void UpdateQuyMst(DataSet ds)
    {
        string constr = GetConnectionStr();
        
        string ss = "Insert into F81001(SHDOCO,SHDCTO,SHBUSTYPE,SHLITM," +
            "SHDSC1,SHLOTN,SHCLTN,SHCLT,SHINST,SHTYPE) values(" +
                "@SHDOCO," +
                "@SHDCTO, @SHBusType," +
                "@SHLITM, @SHDSC1," +
                "@SHLOTN," +
                "@SHCLTN," +
                "@SHCLT," +
                "@SHINST,@SHTYPE)";
        
        SqlConnection con = new SqlConnection(constr);
        con.Open();
        SqlCommand sqlcmd = new SqlCommand(ss,con);
        SqlDataAdapter da = new SqlDataAdapter(sqlcmd);
       // ds.Tables["QuyMst"].Rows[0]["SHDOCO"] = newID;
        da.InsertCommand = sqlcmd;
        da.InsertCommand.Parameters.Add("@SHDOCO", SqlDbType.Int, 8, "SHDOCO");
        da.InsertCommand.Parameters.Add("@SHDCTO", SqlDbType.Char, 2, "SHDCTO");
        da.InsertCommand.Parameters.Add("@SHBUSTYPE", SqlDbType.Int, 4, "SHBUSTYPE");
        da.InsertCommand.Parameters.Add("@SHLITM", SqlDbType.Int, 8, "SHLITM");
        da.InsertCommand.Parameters.Add("@SHDSC1", SqlDbType.Int, 8, "SHDSC1");
        da.InsertCommand.Parameters.Add("@SHLOTN", SqlDbType.Int, 8, "SHLOTN");
        da.InsertCommand.Parameters.Add("@SHCLTN", SqlDbType.Int, 8, "SHCLTN");
        da.InsertCommand.Parameters.Add("@SHCLT", SqlDbType.Int, 8, "SHCLT");
        da.InsertCommand.Parameters.Add("@SHINST", SqlDbType.VarChar, 20, "SHINST");
        da.InsertCommand.Parameters.Add("@SHTYPE", SqlDbType.Char, 2, "SHTYPE");        //ds.Tables["QuyMst"].Rows[0]["SHDOCO"] = newID;
        da.Update(ds.Tables["QuyMst"]);
    }}

解决方案 »

  1.   

    页面中的全局变量dsQuyMst在点击按钮使得页面会送后,dsQuyMst的内容已经被清空了,它并不能持久保存数据结果,必须通过其他方法进行缓存,比如说在LOADDATA函数中使用缓存CACHE["dsQuyMst"]=dsQuyMst 保存数据,然后在按钮单击事件中再从缓存中获取,dsQuyMst=(dataset)CACHE.Get["dsQuyMst"]这样才能取到ds中的内容。
      

  2.   

    dsQuyMst. 是空的, 你没有从数据库获取到数据, 你调试一下
      

  3.   

    我如何知道dsQuymst是空的?
    调试的时候怎么能看出来?
      

  4.   

    LOADDATA()中怎么能保存DATASET,这是要输入的~~
      

  5.   

    在loaddata()中获取数据后,将DS保存到CACHE中,就这么简单,在用的时候再从CACHE中取出就是了
      

  6.   

    数据是要用户输入的,LOADDATA()这个函数只是个初始化作用
      

  7.   

    你不是说,一按了按钮之会清空数据集吗? 
    在按钮ONCLICK事件中写吗?
      

  8.   

    zzc0527:加我QQ吧!
    我的QQ:258041655