如题,我在尝试为新建行赋值时失败,不提示错误,就是无法赋值
DataRow dr = dt.NewRow();
                    dr["要素类型"] = GElist[i].ElName;
                    dt.Rows.Add(dr);
等号右边的值是“线”,结果得到的单元格的值是“要素类型”……
疯了……

解决方案 »

  1.   

     private void showData()
     3        {
     4            DataTable dt = new DataTable("OneEmployee");
     5            dt.Columns.Add("Caption", System.Type.GetType("System.String"));
     6            dt.Columns.Add("Department", System.Type.GetType("System.String"));
     8
     9                DataRow dr = dt.NewRow();
    10                dr["Caption"] = list[i].Name;
    11                dr["Department"] = list[i].Department;
    14                dt.Rows.Add(dr);
    15
    17        }
      

  2.   

    public List<ZhuanJiaVo> TuiJianZhuanJia()
            {
                List<ZhuanJiaVo> list = new List<ZhuanJiaVo>();
                ZhuanJiaVo zhuaJia = null;
                DataTable dt = null;
                DataTable objDataTable = null;
                DataTable dataTable = new DataTable();
                dataTable.Columns.Add(new DataColumn("JiZhun", typeof(string)));
                dataTable.Columns.Add(new DataColumn("ZhuanJia_ID", typeof(string)));
                dataTable.Columns.Add(new DataColumn("ZhuanJia_Name", typeof(string)));
                dataTable.Columns.Add(new DataColumn("ZhuanYe", typeof(string)));
                try
                {
                    SearchBuilder sb = null;
                    dt = new DataTable();
                    sb = new SearchBuilder("select * from [GL].ShiJian_WuZhi");
                    sb.Add("YingJiShiJianXinXiId", OperType.Equal, HttpContext.Current.Session["AppId"]);
                    dt = DbHelper.GetDataTable(AppBase.DbDefault.Connection, sb);
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        sb = new SearchBuilder("select * from [SJK].[V_ZhuanJia_XinXi_ZhuanJia_WuZhi_TeXing]");
                        sb.Add("T_WuZhi_ID", OperType.Equal, dt.Rows[i]["T_WuZhi_ID"]);
                        DataTable dt1 = new DataTable();
                        dt1 = DbHelper.GetDataTable(AppBase.DbDefault.Connection, sb);
                        foreach (DataRow dr in dt1.Rows)
                        {
                            DataRow dataRow = dataTable.NewRow();
                            dataRow["JiZhun"] = "危险物质";
                            dataRow["ZhuanJia_ID"] = dr["ZhuanJia_ID"];
                            dataRow["ZhuanJia_Name"] = dr["ZhuanJia_Name"];
                            dataRow["ZhuanYe"] = dr["ZhuanYe"];
                            dataTable.Rows.Add(dataRow);
                        }
                        DataTable dt2 = new DataTable();
                        sb = new SearchBuilder("select * from [SJK].[V_PollutionType_ZjType_ZhuanJia_XinXi]");
                        sb.Add("YingJiShiJianXinXiId", OperType.Equal, 38);
                        dt2 = DbHelper.GetDataTable(AppBase.DbDefault.Connection, sb);
                        foreach (DataRow item in dt2.Rows)
                        {
                            DataRow dataRow = dataTable.NewRow();
                            dataRow["JiZhun"] = "事件污染类型";
                            dataRow["ZhuanJia_ID"] = item["ZhuanJia_ID"];
                            dataRow["ZhuanJia_Name"] = item["ZhuanJia_Name"];
                            dataRow["ZhuanYe"] = item["ZhuanYe"];
                            dataTable.Rows.Add(dataRow);
                        }
                    }
                    if (dataTable.Rows.Count > 0)
                    {
                        DataView dv = new DataView(dataTable);
                        objDataTable = new DataTable();
                        objDataTable = dv.ToTable(true, "JiZhun", "ZhuanJia_ID", "ZhuanJia_Name", "ZhuanYe");
                        foreach (DataRow dr in objDataTable.Rows)
                        {
                            zhuaJia = new ZhuanJiaVo();
                            zhuaJia.ZhuanJia_ID = DataHelper.ToInt(dr["ZhuanJia_ID"]);
                            zhuaJia.ZhuanJia_Name = DataHelper.ToString(dr["ZhuanJia_Name"]);
                            zhuaJia.JiZhun = DataHelper.ToString(dr["JiZhun"]);
                            zhuaJia.ZhuanYe = DataHelper.ToString(dr["ZhuanYe"]);
                            list.Add(zhuaJia);
                        }
                        //根据专家名字去重复
                        //for (int i = 0; i < dataTable.Rows.Count - 1; i++)
                        //{
                        //if (dataTable.Rows[i]["ZhuanJia_Name"].ToString().Trim() == dataTable.Rows[i + 1]["ZhuanJia_Name"].ToString().Trim())
                        //{
                        //    dataTable.Rows.RemoveAt(i);
                        //    dataTable.Rows[i]["JiZhun"] = "危险物质,事件污染类型";
                        //    dataTable.AcceptChanges();
                        //    i--;
                        //}
                        //}
                    }
                }
                catch (Exception ex)
                {
                    AppBase.AddException(this, "根据当前事件推荐相对应的专家时出现异常:" + ex.Message);
                }
                return list;
            }
    希望对你有帮助
      

  3.   

    FROM MSDN:
    private void CreateNewDataRow()
    {
        // Use the MakeTable function below to create a new table.
        DataTable table;
        table = MakeNamesTable();    // Once a table has been created, use the 
        // NewRow to create a DataRow.
        DataRow row;
        row = table.NewRow();    // Then add the new row to the collection.
        row["fName"] = "John";
        row["lName"] = "Smith";
        table.Rows.Add(row);    foreach(DataColumn column in table.Columns)
            Console.WriteLine(column.ColumnName);
        dataGrid1.DataSource=table;
    }private DataTable MakeNamesTable()
    {
        // Create a new DataTable titled 'Names.'
        DataTable namesTable = new DataTable("Names");     // Add three column objects to the table.
        DataColumn idColumn = new  DataColumn();
        idColumn.DataType = System.Type.GetType("System.Int32");
        idColumn.ColumnName = "id";
        idColumn.AutoIncrement = true;
        namesTable.Columns.Add(idColumn);    DataColumn fNameColumn = new DataColumn();
        fNameColumn.DataType = System.Type.GetType("System.String");
        fNameColumn.ColumnName = "Fname";
        fNameColumn.DefaultValue = "Fname";
        namesTable.Columns.Add(fNameColumn);    DataColumn lNameColumn = new DataColumn();
        lNameColumn.DataType = System.Type.GetType("System.String");
        lNameColumn.ColumnName = "LName";
        namesTable.Columns.Add(lNameColumn);    // Create an array for DataColumn objects.
        DataColumn [] keys = new DataColumn [1];
        keys[0] = idColumn;
        namesTable.PrimaryKey = keys;    // Return the new DataTable.
        return namesTable;
    }
      

  4.   

    呃,我愚钝,能解释下和我的有什么不同么,我感觉赋值方式都是一样的啊,dr["columnName"]=value
      

  5.   


      DataRow dr = dt.NewRow();
      dr["要素类型"] = GElist[i].ElName;//你确定这里的值是“线”?
      dt.Rows.Add(dr);结果得到的单元格的值是“要素类型”
    要得到你的单元格的值dr["要素类型"].ToString();//看看这个值是啥了一个Demopublic static DataTable ConvertRank(string WhereString, string FieldName)
            {
                List<UserField> allField = UserFieldDB.GetAllList("");//获得数据库中所有的列的信息
                StringBuilder baseField = new StringBuilder(string.Empty);//用于存储需要显示的基础字段的列
                List<UserField> baseFields = new List<UserField>();//基础字段的列对象 在构建dt的时候用到
                string[] FieldNames = FieldName.Split('|');
                List<string> AdditionalField = new List<string>();//存储非基础字段            #region 分离出基础列和非基础列
                for (int i = 0; i < FieldNames.Length; i++)
                {
                    if (FieldNames[i] != "")
                    {
                        foreach (UserField item in allField)
                        {
                            if (item.FieldName == FieldNames[i])
                            {
                                if (item.IsSynchro)//将需要显示列中的基础列单独出来,用于查询基础数据表
                                {
                                    string baseColumn = item.SynchronousSource;//根据数据源获得基础列名
                                    baseColumn = baseColumn.Contains('.') ? baseColumn.Substring(baseColumn.LastIndexOf('.') + 1, baseColumn.Length - baseColumn.LastIndexOf('.') - 1) : baseColumn;
                                    item.SynchronousSource = baseColumn;//为使下面的绑定顺利进行 在此修改了基础字段的源数据  张辉  2011.12.16 修改
                                    baseField.Append(baseColumn);
                                    baseField.Append(",");
                                    baseFields.Add(item);//记录基础列  构建dt时需要用到
                                }
                                else
                                {
                                    AdditionalField.Add(FieldNames[i].ToString());
                                }
                            }
                        }
                    }
                }
                #endregion            //获得需要显示的基础列的数据
                DataTable baseData = FieldValueDB.GetBaseData(baseField.ToString().Substring(0, baseField.Length > 0 ? baseField.Length - 1 : 0), FieldValueDB.GetAllUserids(WhereString));
                DataTable dt = new DataTable();//新创建内存表 用于存储转化后的结果  为什么不知用baseData?列名发生了变化,baseData中都是基础字段列名
                dt.Columns.Add("UId");
                foreach (var item in baseFields)//将基础字段的列名添加到新的内存表中
                {
                    dt.Columns.Add(item.FieldName);
                }
                foreach (DataRow item in baseData.Rows)//将基本表中的数据先放到内存表中
                {
                    DataRow newRow = dt.NewRow();
                    newRow["UId"] = item["MemberID"].ToString();
                    foreach (UserField itemFild in baseFields)
                    {
                        newRow[itemFild.FieldName] = item[itemFild.SynchronousSource];
                    }
                    dt.Rows.Add(newRow);
                }            foreach (var itemColumn in AdditionalField)//将非基础字段的列名加入到内存表中
                {
                    dt.Columns.Add(itemColumn);
                }
                //获得所有扩展列中的数据
                DataTable allData = FieldValueDB.GetAllUsers(WhereString).Tables[0];
                if (baseData == null || allData == null)
                {
                    return null;
                }            #region 将非基础字段的数据添加到内存表中
                int j = 0;
                for (int i = 0; i < allData.Rows.Count; i++)
                {
                    DataRow DataItem = allData.Rows[i];
                    if (DataItem["UId"].ToString() == dt.Rows[j]["UId"].ToString())
                    {
                        if (dt.Columns.Contains(DataItem["FieldName"].ToString()))
                        {
                            dt.Rows[j][DataItem["FieldName"].ToString()] = DataItem["Content"].ToString();
                        }
                    }
                    else
                    {
                        for (int k = j; k < baseData.Rows.Count; k++)
                        {
                            if (DataItem["UId"].ToString() == dt.Rows[k]["UId"].ToString())
                            {
                                if (dt.Columns.Contains(DataItem["FieldName"].ToString()))
                                {
                                    dt.Rows[k][DataItem["FieldName"].ToString()] = DataItem["Content"].ToString();
                                }
                                j = k;
                                break;
                            }
                        }
                    }
                }
                #endregion            return dt;
            }
      

  6.   

    你在数据库查的是个DataTable里面包含ID,Name属性,那就定义一个虚拟DataTable:例如
    DataTable dataTable = new DataTable();
    dataTable.Columns.Add(new DataColumn("ID", typeof(string)));
    dataTable.Columns.Add(new DataColumn("Name", typeof(string)));
    然后用一个DataTable接收查询的值
    DataTable dt=new DataTable();
    SearchBuilder sb = new SearchBuilder("select ID,Name from UserInfo");
    DataTable dt= new DataTable();
    dt = DbHelper.GetDataTable(AppBase.DbDefault.Connection, sb);
    然后foreach
    foreach (DataRow dr in dt1.Rows)
    {
    DataRow dataRow = dataTable.NewRow();
    dataRow["ID"] = dr["ID"];
    dataRow["Name"] = dr["Name"];
    dataTable.Rows.Add(dataRow);
    }
    按这种绝对没问题的
      

  7.   

    你要用for循环的话就是这样子的
    for(int i = 0; i < dt.Rows.Count; i++)
    {
    DataRow dataRow = dataTable.NewRow();
    dataRow["ID"] = dt.Rows[i]["ID"];
    dataRow["Name"] = dt.Rows[i]["Name"];
    dataTable.Rows.Add(dataRow);
    }
    上个回答这一句
    foreach (DataRow dr in dt1.Rows)
    dt1应该是dt原来写的代码改了下