string str = null;
            DataTable dt = (DataTable)dataGrid1.DataSource;
            int rowCount = dt.Rows.Count;
            int columnCount = dt.Columns.Count;
            for (int i = 0; i < rowCount; i++)
            {
                for (int j = 0; j < columnCount; j++)
                {                       
                    str+= (dt.Rows[i][j].ToString()+"-");
                }
            }
            inputtext = str;
如何把inputtext转回DataTable,不会了,请指教!

解决方案 »

  1.   

    那你以前为什么要这么转了,如果是单行的话,还好说,但是这样每一列的类型全部丢失了,因此你很难还原成一样的datatable。如果只是完成
    数据〈==〉文本
    这样功能的话,建议你使用DataSet.WriteXml以及DataSet.GetXml这两种方法,要简便的多。
      

  2.   

    Knight94(愚翁)的方法不错还是说说你最终的意图是什么,说不定大家会有更好的方法
      

  3.   

    那你以前为什么要这么转了,如果是单行的话,还好说,但是这样每一列的类型全部丢失了,因此你很难还原成一样的datatable。如果只是完成
    数据〈==〉文本
    这样功能的话,建议你使用DataSet.WriteXml以及DataSet.GetXml这两种方法,要简便的多。
    --------------------------------------------------
    对头,强好
      

  4.   

    const char SPLITCHAR = '|';
      

  5.   

    System.Text.StringBuilder str = new System.Text.StringBuilder(); //string str = null;
    DataTable dt = (DataTable)dataGrid1.DataSource;
    int rowCount = dt.Rows.Count;
    int columnCount = dt.Columns.Count;object val = null;
    string vals = "";
    for (int i = 0; i < rowCount; i++)
    {
        for (int j = 0; j < columnCount; j++)
        {
            val = dt.Rows[i][j];
            if (val == DBNull.Value) val = string.Empty;        vals += val.ToString() + SPLITCHAR;//避免使用 - 做分割符,太常用       
        }
        vals = vals.TrimEnd(SPLITCHAR);
        str.AppendLine(vals);
    }
    inputtext = str.ToString();//导出完成//导入这些数据...
    System.IO.StringReader sr = new System.IO.StringReader(inputtext);
    try
    {
        string[] colValues = null;
        DataRow row = null;
        int index = 1;//行位置索引    while (true)
        {
            vals = sr.ReadLine();
            if (vals == string.Empty) break;//导入完成        colValues = vals.Split(SPLITCHAR);
            row = dt.NewRow();
            row.BeginEdit();
            for (int i = 0; i < colValues.Length; i++)
            {
                row[i] = colValues[i];
            }
            row.EndEdit();
            dt.Rows.Add(row);
            dt.ReadXml
        }}
    catch (Exception ex) { throw ex; }
    finally { sr.Close(); }
      

  6.   

    to 3tzjq(永不言弃)这样也很难保证数据中不能含有“|”,
    再加上如果DataTable定义了DataColumn属性的话,你用string类型数据去加入不是string类型列的时候系统会报错的。
      

  7.   

    string[] ..= inputtext.split("-");
                 for (int i = 0; i < rowCount; i++)
                {
                    for (int j = 0; j < columnCount; j++)
                    {                       
                        dt.Rows[i][j].ToString()=string[j*i+i]
                    }
                }
    不知道这样行不
      

  8.   

    string str = null;
                DataTable dt = (DataTable)dataGrid1.DataSource;
                int rowCount = dt.Rows.Count;
                int columnCount = dt.Columns.Count;
                for (int i = 0; i < rowCount; i++)
                {
                    for (int j = 0; j < columnCount; j++)
                    {                       
                        str+= (dt.Rows[i][j].ToString()+"-");
                    }
                }
                inputtext = str+rowCount.ToString()+columnCount.ToString();不知道这样有没有办法转换成DataTable?
      

  9.   

    to 不知道这样有没有办法转换成DataTable?你反向生成的时候,按照上面提的,先进行split,然后进行插入DataRow,
    不过要进行类型转换,即把string类型变量按照DataTable数据列的类型进行转换。
      

  10.   

    对Object数据类型赋值不需要进行显式转换!不过最好这样:
    for (int i = 0; i < colValues.Length; i++)
    {
      try
      {
       row[i] = colValues[i];
      }
      catch
      {
        row[i] = dt.Columns[i].DefaultValue;//赋值无效时就设置默认值
      }
    }