我先介绍一下问题:我用两个gridview绑定数据,关联了两个表,点击其中一个gridview控件的选择按钮,将选中的行的内容展开,通过选中的行调用数据库中相关的数据,这个需要在另一个gridview中显示,变量值也传递了,可是其中另一个控件就是不显示数据。之前用行ID可以实现,现在用行里面的其中一个字段就出问题了下面将代码贴出来:
  public void bind()    {
        string sqlstr = "select * from component";
        con = new SqlConnection(strCon);
        SqlDataAdapter myda = new SqlDataAdapter(sqlstr, con);
        DataSet myds = new DataSet();
        con.Open();
        myda.Fill(myds, "catalog");
        GridView1.DataSource = myds;
        GridView1.DataKeyNames = new string[] { "ProNum" };//主键
        GridView1.DataBind();
         GridView1.HeaderRow.Cells[1].Text = "序号";
         GridView1.HeaderRow.Cells[2].Text = "资源名";
         GridView1.HeaderRow.Cells[3].Text = "创建时间";
         GridView1.HeaderRow.Cells[4].Text = "附加信息";
        con.Close();
    }
 public void bind1(string str)    {
        string sqlstr = "SELECT ProNum,SubProNum,Name,path FROM subcomponent  where ProNum= '  " + str + " '  ";
        con = new SqlConnection(strCon);
        SqlDataAdapter myda = new SqlDataAdapter(sqlstr, con);
        DataSet myds = new DataSet();
        con.Open();
        myda.Fill(myds, "result");
        GridView2.DataSource = myds;
        GridView2.DataKeyNames = new string[] { "ID" };//主键
        GridView2.DataBind();
        GridView2.HeaderRow.Cells[1].Text = "序号";
        GridView2.HeaderRow.Cells[2].Text = "产品总类";
        GridView2.HeaderRow.Cells[3].Text = "产品编号";
        GridView2.HeaderRow.Cells[4].Text = "产品名称";
     
 con.Close();上面代码是两个控件绑定数据代码,bind1通过变量str传递过来的值就行数据库查找。如果直接运行,就出现绿色代码的问题,问题是“未将对象引用设置到对象的实例”,我修改了下标,还是会出现这个问题;如果我把绿色代码删除,不会出现这个问题,但是gridview控件不显示,标题和数据都不显示。单步调试可以看到ProNum值有变化,而且传给str了,这是怎么个问题,请大侠给点建议。gridviewc#数据库

解决方案 »

  1.   

    绿色代码部分需要你在databind()方法之前执行
      

  2.   

     GridView2.DataKeyNames = new string[] { "ID" };//主键
    没看出你后来的Id在哪里
    string sqlstr = "SELECT ProNum,SubProNum,Name,path FROM subcomponent  where ProNum= '  " + str + " '  ";
      

  3.   

    你看下
    string sqlstr = "SELECT ProNum,SubProNum,Name,path FROM subcomponent  where ProNum= '  " + str + " '  ";
    的值
    应该是没数据
      
    *****************************************************************************
    签名档: http://feiyun0112.cnblogs.com/
      

  4.   

    补充一点,我的值传递是在
     protected void CtlButton_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;
            GridViewRow gvr = (GridViewRow)button.Parent.Parent;
            string pk1 = GridView1.DataKeys[gvr.RowIndex].Value.ToString();
            bind1(pk1);
        }
    这个是调用bind里面的DataKeyNames ,提取后传给str。如果把pronum换成ID,在控件里面就可以显示了。
      

  5.   

    你这样说感觉有道理,不过我在前面的select中添加了ID,主键设置成ID,运行还是没有显示。我把调试的结果截图给你看看。
      

  6.   

    Quote: 引用 3 楼 feiyun0112 的回复:

    你看下
    string sqlstr = "SELECT ProNum,SubProNum,Name,path FROM subcomponent  where ProNum= '  " + str + " '  ";
    的值
    应该是没数据
      
    *****************************************************************************这个str是有值的,通过PK1传递,可以看图,里面有个赋值pk1赋给了sid.
      

  7.   

    ' er003'
    是不是多了个空格?
    ProNum= '  " + str + " ' 
    ProNum= '" + str + " '