gridview中把其中一行的某个字段用 session传值 获得不到session值问题

时间:2021-12-12 15:02:10
vs2005  C# 编写的   
      a.aspx.cs文件
           sqlcon = new SqlConnection(connstr);
           for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
              {
                  CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
                  if (cbox.Checked == true)
                  {
                       Session["UserID"] = GridView1.DataKeys[i].Value.ToString;
                      
                      String sqlstr = "delete from PD_Admin where Admin_XH='" + GridView1.DataKeys[i].Value + "'";
                      SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
                      sqlcon.Open();
                      sqlcom.ExecuteNonQuery();
                      sqlcon.Close();
                  }


b.aspx.cs文件


      sqlcon = new SqlConnection(connstr);
            String sqlstr = "select * from PD_Admin where Admin_XH='" + Session["UserID"] + "'";
            SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
            DataSet myds = new DataSet();
            myda.Fill(myds, "PD_Admin");
            DataTable myTable = myds.Tables["PD_Admin"];
            if (myTable.Rows.Count > 0)
            {
                X_Name.Text = myTable.Rows[0]["Admin_ZH"].ToString();
            }

            怎么获得不到session的值,哪里错了?     
           断点跟踪测试session值为空

15 个解决方案

#1


要确定在a页面中session不为空啊  你gridview中只选中一个?
选的多了 估计都是最后一个了  
你先把session值在a页面中打印出来试试 
如果有的话b页面肯定能找到

#2


 if (cbox.Checked == true)
  {
  Session["UserID"] = GridView1.DataKeys[i].Value.ToString;
进入这个if 了么?在这打个断点...

#3


在这打个断点 就直接过去了  没信息提示

#4


怎么办啊,急啊

#5


在a.aspx 我把Session赋给label.text,没有数据
怎么才能获得值啊

#6



if (cbox.Checked == true)断点设置在这,我想if里面根本就没进去.所以session一直为空.

我在指出你代码可能存在的几点问题
1.如果你是单行删除,为什么用CheckBox呢. 如果是多行,即使session得到了值,在b.aspx页面中永远都是最后选中的那一个值.
2. 在a.aspx.cs 中最好不要在循环里面多次打开,关闭数据库.如果要执行多行,最好拼成一条语句执行.

#7


 a.aspx.cs文件
  sqlcon = new SqlConnection(connstr);
  for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
  {
  CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
  if (cbox.Checked == true)
  {
   Session["UserID"] = GridView1.DataKeys[i].Value.ToString;
我知道这一行代码错误, GridView1.DataKeys[i].Value.ToString 是一行的值,不是某一字段的值,不知怎么改,各位帮帮忙啊!  String sqlstr = "delete from PD_Admin where Admin_XH='" + GridView1.DataKeys[i].Value + "'";

#8


 GridView1中的属性  DataKeyNames="Admin_XH" 这你设置了没有

#9


设置了

#10


谁能给我建议或好的解决方法,让我来解决这个问题,我会把我仅剩余的80分全给他!急啊!

#11


DataGrid_News.DataKeys[e.Item.ItemIndex];

#12


DataGrid_News.DataKeys[e.Item.ItemIndex ][0].ToString();得到该行第一个单元格的值,根据您的需要选择哪个字段的值

#13


补充说明:
DataGrid_News.DataKeys[i][0].ToString();得到该行第一个单元格的值,根据您的需要选择哪个字段的值

#14


用的是gridview,不是datagrid!

#15


已解决

#1


要确定在a页面中session不为空啊  你gridview中只选中一个?
选的多了 估计都是最后一个了  
你先把session值在a页面中打印出来试试 
如果有的话b页面肯定能找到

#2


 if (cbox.Checked == true)
  {
  Session["UserID"] = GridView1.DataKeys[i].Value.ToString;
进入这个if 了么?在这打个断点...

#3


在这打个断点 就直接过去了  没信息提示

#4


怎么办啊,急啊

#5


在a.aspx 我把Session赋给label.text,没有数据
怎么才能获得值啊

#6



if (cbox.Checked == true)断点设置在这,我想if里面根本就没进去.所以session一直为空.

我在指出你代码可能存在的几点问题
1.如果你是单行删除,为什么用CheckBox呢. 如果是多行,即使session得到了值,在b.aspx页面中永远都是最后选中的那一个值.
2. 在a.aspx.cs 中最好不要在循环里面多次打开,关闭数据库.如果要执行多行,最好拼成一条语句执行.

#7


 a.aspx.cs文件
  sqlcon = new SqlConnection(connstr);
  for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
  {
  CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
  if (cbox.Checked == true)
  {
   Session["UserID"] = GridView1.DataKeys[i].Value.ToString;
我知道这一行代码错误, GridView1.DataKeys[i].Value.ToString 是一行的值,不是某一字段的值,不知怎么改,各位帮帮忙啊!  String sqlstr = "delete from PD_Admin where Admin_XH='" + GridView1.DataKeys[i].Value + "'";

#8


 GridView1中的属性  DataKeyNames="Admin_XH" 这你设置了没有

#9


设置了

#10


谁能给我建议或好的解决方法,让我来解决这个问题,我会把我仅剩余的80分全给他!急啊!

#11


DataGrid_News.DataKeys[e.Item.ItemIndex];

#12


DataGrid_News.DataKeys[e.Item.ItemIndex ][0].ToString();得到该行第一个单元格的值,根据您的需要选择哪个字段的值

#13


补充说明:
DataGrid_News.DataKeys[i][0].ToString();得到该行第一个单元格的值,根据您的需要选择哪个字段的值

#14


用的是gridview,不是datagrid!

#15


已解决