public void bindgrid()
{
string OracleClient= ConfigurationSettings.AppSettings["connstr"];//从配置文件中取出连接字符串
OracleConnection Conn =new OracleConnection(OracleClient);

DateTime SecondDate,FirstDate;
FirstDate = Convert.ToDateTime(WebDateChooser1.Text.ToString());
SecondDate = Convert.ToDateTime(WebDateChooser2.Text.ToString());
TimeSpan ts = SecondDate-FirstDate;
string ts1=ts.Days.ToString();
Single j=Convert.ToSingle(ts1)+1;
Single i;
string sql="select distinct plan_type from xj_plan ";
DataSet ds1= new DataSet();
OracleDataAdapter da1 = new OracleDataAdapter(sql,Conn);
da1.Fill(ds1, "xj_plan");
DataRow dr1 = ds1.Tables["xj_plan"].Rows[0];
string a=dr1["plan_type"].ToString();
if(a=="1")
    i=j;
string aa=Request["aa"].ToString().Trim();
string bb=Request["bb"].ToString().Trim();
string cc=Request["cc"].ToString().Trim();if(ddl1.SelectedItem.Text.ToString()=="全部")
{  
// Response.Write(aa+bb+cc+"11111111111111111111");
DataGrid1.DataSource=GetDataSet("Select JD as 井队, ROUTE_NAME as 岗位,PLACE_NAME as 检查点,CHK_DATE as 检查日期,CHK_TIME as 检查时间,CHK_REQUIR as 检查要求,CHK_EVENT as 检查结果,CHK_DESC as 结果描述,CHK_RESULT as 核查结果,OPERATOR_NAME as 检查人,REMARK as 备注,SAVE_DATE as 保存日期 from XJ_RECORD where to_date(save_date,'yyyy-mm-dd')>=to_date('"+WebDateChooser1.Text.ToString()+"','yyyy-mm-dd')  and  to_date(save_date,'yyyy-mm-dd')<=to_date('"+WebDateChooser2.Text.ToString()+"','yyyy-mm-dd') order by ROUTE_NAME,PLACE_NAME,SAVE_DATE,CHK_DATE");
DataGrid1.DataBind();
DataGrid2.DataSource=GetDataSet("select XJ_RECORD.ROUTE_NAME as 岗位 , XJ_RECORD.PLACE_NAME as 检查点 ,sum(XJ_RECORD.ischeck) as 实际检查次数,avg(XJ_PLAN.PLAN_NUM*'"+i+"') as 计划检查次数 from XJ_RECORD  ,XJ_PLAN where to_date(XJ_RECORD.save_date,'yyyy-mm-dd')>=to_date('"+WebDateChooser1.Text.ToString()+"','yyyy-mm-dd')  and  to_date(XJ_RECORD.save_date,'yyyy-mm-dd')<= to_date('"+WebDateChooser2.Text.ToString()+"','yyyy-mm-dd') and XJ_PLAN.ROUTE_NAME=XJ_RECORD.ROUTE_NAME   and XJ_PLAN.PLACE_NAME=XJ_RECORD.PLACE_NAME group by XJ_RECORD.ROUTE_NAME,XJ_RECORD.PLACE_NAME");
DataGrid2.DataBind();
}
else
{
DataGrid1.DataSource=GetDataSet("Select JD as 井队, ROUTE_NAME as 岗位,PLACE_NAME as 检查点,CHK_DATE as 检查日期,CHK_TIME as 检查时间,CHK_REQUIR as 检查要求,CHK_EVENT as 检查结果,CHK_DESC as 结果描述,CHK_RESULT as 核查结果,OPERATOR_NAME as 检查人,REMARK as 备注,SAVE_DATE as 保存日期 from XJ_RECORD where to_date(save_date,'yyyy-mm-dd')>=to_date('"+WebDateChooser1.Text.ToString()+"','yyyy-mm-dd')  and  to_date(save_date,'yyyy-mm-dd')<=to_date('"+WebDateChooser2.Text.ToString()+"','yyyy-mm-dd') and chk_result='"+ddl1.SelectedItem.ToString()+"' order by ROUTE_NAME,PLACE_NAME,SAVE_DATE,CHK_DATE");
DataGrid1.DataBind();
DataGrid2.DataSource=GetDataSet("select XJ_RECORD.ROUTE_NAME as 岗位 , XJ_RECORD.PLACE_NAME as 检查点 ,sum(XJ_RECORD.ischeck) as 实际检查次数,avg(XJ_PLAN.PLAN_NUM*'"+i+"') as 计划检查次数 from XJ_RECORD  ,XJ_PLAN where to_date(XJ_RECORD.save_date,'yyyy-mm-dd')>=to_date('"+WebDateChooser1.Text.ToString()+"','yyyy-mm-dd')  and  to_date(XJ_RECORD.save_date,'yyyy-mm-dd')<= to_date('"+WebDateChooser2.Text.ToString()+"','yyyy-mm-dd') and XJ_PLAN.ROUTE_NAME=XJ_RECORD.ROUTE_NAME   and XJ_PLAN.PLACE_NAME=XJ_RECORD.PLACE_NAME and chk_result='"+ddl1.SelectedItem.ToString()+"' group by XJ_RECORD.ROUTE_NAME,XJ_RECORD.PLACE_NAME");
DataGrid2.DataBind();
}
}
总报错,使用了未赋值的局部变量i

解决方案 »

  1.   

    Single i;改成Single i = 0 ;
      

  2.   

    不行,single i=0;
    if(a=="1")
     i=j;
    if(a=="2")
    i=Convert.ToInt32(j/7);
    这个执行不到阿
      

  3.   

    我知道是那里的问题了。
    DataSet ds1= new DataSet();
    OracleDataAdapter da1 = new OracleDataAdapter(sql,Conn);
    da1.Fill(ds1, "xj_plan");
    DataRow dr1 = ds1.Tables["xj_plan"].Rows[0];
    string a=dr1["plan_type"].ToString();
    这里的a值取得了库里一个表里的一列的一个值,怎么样能实现取出所有值,然后进行判断呢,谢谢大家
      

  4.   

    DataRow dr1 = ds1.Tables["xj_plan"].Rows[0];
    用这条语句只是取到了该列中的一个值,另外两个取不到。就是这列有三个值,1、2、3;
    按照我这样写只能读出”1“这个值,怎样能把这三个值都取到,然后用if判断阿。谢谢了
    int TableRow_Count = ds1.Tables["xj_plan"].DefaultView.Count; for(int m = 0; m < TableRow_Count; m++)
    {
    DataRow dr = ds1.Tables["xj_plan"].Rows[m];
    string a=dr["plan_type"].ToString();
    Response.Write(a);
    if(a=="1")
    {i=j;}
    if(a=="2")
    {i=Convert.ToInt32(j/7);}
    if(a=="3")
    {i=Convert.ToInt32(j/30);}
    }
    这样的话只取出最大的值,
      

  5.   

    if(a=="1") 
      i=j;这里错了,你只在a=="1"时才给i附值,所以编译器报错.应该考虑到a != "1"时的附值.
      

  6.   

    你没循环依次就给i付了一次值!
    当然取不到了!建议建一个int数组!这样:
    int [] i = new i[3];
    for(int m = 0; m < TableRow_Count; m++)
    {
        DataRow dr = ds1.Tables["xj_plan"].Rows[m];
        string a=dr["plan_type"].ToString();
        Response.Write(a);
        if(a=="1")
        {i[0]=j;}
        if(a=="2")
        {i[1]=Convert.ToInt32(j/7);}
        if(a=="3")
        {i[2]=Convert.ToInt32(j/30);}
    }
    这样i[0]就存储了a=="1"时的值;
    i[1]存储了a=="2"时的值;
    i[2]存储了a=="3"时的值;数组的大小自己去定义!
    我这里只是一个例子
      

  7.   

    不是阿。
    if(a=="1")
    {i=j;}
    if(a=="2")
    {i=Convert.ToInt32(j/7);}
    if(a=="3")
    {i=Convert.ToInt32(j/30);}
    这里有判断阿;
    string a=dr["plan_type"].ToString();
    Response.Write(a);
    这里的阿。是去该列的值的。她一次将所有值取到连在一起了。就是这里返回a=123
    我想让阿一次返回一个值,怎么实现阿