大家好。
    现在向大家请教关于在加载页面时动态改变SqlDataSource的SelectCommand的SQL语句问题。
    假如SqlDatasource原来的SelectCommand等于”Select 字段A,字段B from 表”需将其改为“select 字段C,字段D,字段E from 表”
    要实现以上动作我们需如何实现呢?

解决方案 »

  1.   

    sqldatasource.selectcommand="";
    在后台改不就可以
      

  2.   

    我试过在后台用SqldataSource1.SelectCommand=“select 字段C,字段D,字段E from 表”,可是只能在IsPostBack=False的情况下才可以的,再次刷新则不起作用。
      

  3.   

    不会啊,我就是这样做在。放在Page_Load里,不要写在if(!IsPostBack){}里面,写在外面。
      

  4.   

    动态改变selectcommand的值,若新的sql中不包含原字段列表中的字段就报错:
    在选定的数据源上未找到名为“YWYH”的字段或属性(YWYH为设计阶段sqldatasource中字段列表的第一个)
      

  5.   

    我试过在后台用SqldataSource1.SelectCommand=“select 字段C,字段D,字段E from 表”,可是只能在IsPostBack=False的情况下才可以的,再次刷新则不起作用。=============================================
    两种可能性,我不知道你是哪一种,你自己看看。
    1、由于你得gridview中的列名和datasource中的列名不对应,导致gridview找不到数据。2、有于页面上的参数面有变化,所以系统认为页面上的内容不需要修改,所以没有变化。
    这种情况一般把datasource的enableviewstate设成false就行了
      

  6.   

    默认的情况下ViewState 是可以被解密篡改,所以asp.net就没有把一些敏感东西放在ViewState里。
    比如 SqldataSource 的 SelectCommand ,ConnectionString属性 等。
    所以你必须手工保存这些值,比如ViewState["SelectCommand"] =SqldataSource1.SelectCommand;然后    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //....
            }        if (ViewState["SelectCommand"] != null)
            {
                SqlDataSource1.SelectCommand = ViewState["SelectCommand"].ToString();        }
        }
     
    建议你加密ViewState
    你可以参考http://www.microsoft.com/china/MSDN/library/archives/library/DNAspnet/html/asp11222001.asp
      

  7.   

    //SqlDataSource1.EnableViewState = false; //可有可无
    SqlDataSource1.SelectCommand = TextBox1.Text;
    //如果你手动修改了GridView的列属性,有可以在开启第二张表时,无法找到列的错误提示,要使用自动生成字段。