我在gridview中加入了一列templatefield,实现的是“分解”功能。(例如一张数据表中,父图号为:“中国”,子图号为:“浙江”    点中“分解”按钮,gridview中就刷新为父图号为:“浙江”,子图号为:“杭州”,再点中,就是父图号为“杭州”,子图号为“余杭”,依次类推····。表的结构就是列为:父图号,子图号 (就一张表))下面为我的代码,但是运行时界面出来了,点中“分解”按钮,就报错了,int childID = Convert.ToInt32(e.CommandArgument);“提示输入字符串的格式不正确”,请各位高手忙帮解决!!!
 
templatefield的代码为<asp:TemplateField AccessibleHeaderText="分解" HeaderText="分解" ShowHeader="False">
                    <ItemTemplate>
                        <asp:Button ID="btn_dis" runat="server" CausesValidation="False" 
                            CommandArgument='<%#Eval("子图号")%>' CommandName="iDis" Text="分解" />
                    </ItemTemplate>
CS的代码为
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
          int fID=0;  
          bindGrid(fID); 
        }
    }     private void bindGrid(int fid) 
    {
        string str = "SELECT gx.FTH as 父图号, gx.WZH as 位置号, cp.TH as 子图号,cp.MC as 名称, gx.SL as 数量, cp.DW as 单位, gx.CR as CR, cp.zx11 as 走向1, gx.zx11 as 走向2,cp.zx13 as 走向3  FROM gx,cp where gx.ZTH = cp.TH and gx.fth= '" + fid + "'";
        SqlConnection cn1 = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnString1"]);
        SqlCommand cmd1 = new SqlCommand(str, cn1);
        SqlDataAdapter sda = new SqlDataAdapter(cmd1);
        DataSet dt = new DataSet();
        sda.Fill(dt);
        GridView1.DataSource = dt.Tables[0];
        GridView1.DataBind();      
    } 
protected void  GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "iDis")
    {
        int childID = Convert.ToInt32(e.CommandArgument);
        bindGrid(childID);  //如果有翻页要先把GV_Map.pageindex=0; 
    } 
}

解决方案 »

  1.   

    please debug the value of e.CommandArgument 
    int childID = Convert.ToInt32(e.CommandArgument);“提示输入字符串的格式不正确”
      

  2.   

    I think 
    int childID = Convert.ToInt32(e.CommandArgument.?) is correct! I forget!
      

  3.   

    e.CommandArgument值不是数值型,看看cp.TH值
    最好在gridview里实现treeview结构
      

  4.   

    楼上格式错了,好象不能编辑,重新来一次。。你的查询语句是
    引用
    [Quote]
    string str = "SELECT ... where ... and  gx.fth= '" + fid + "'"; 
    [/Quete] 
    这里很明显gx.fth是个字符串型,而你的方法bindGrid(int fid)传入的是个int型。在CommandArgument你把它转换为int型传入。 
    我不知道你数据库里的gx.hth是什么数据类型, 一、如果是int,你就改查询语句 
    string str = "SELECT ... where ... and  gx.fth= " + fid; 二、如果是字符串型,你就不需要强制转换为int了. 
    定义方法private void bindGrid(string fid){...} 
    传入参数 
     
      

  5.   

    这UBB代码支持好象有问题。。很多人遇到过吧
      

  6.   

    protected void  GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 

        if (e.CommandName == "iDis") 
        { 
            int childID = Convert.ToInt32(e.CommandArgument); 
            bindGrid(childID);  //如果有翻页要先把GV_Map.pageindex=0; 
        } 
    }
    这里面写的有问题,,一来的话先判断是不是datarow,是的话才可以。。
      

  7.   

    谢谢camperer,太厉害啦!!非常非常非常感谢