将字符串转成DataSet绑定到Grid中和读写web.config文件

      编程时老是会遇到一些可笑的事情。刚做的一个公网IP->内网IP的映射的维护,本来应该建立一张表来实现这种对应关系的可是我这却没有,而是将它们用一个字符串来表示,写在了web.config文件中。这就出现了不少问题,我读出来的IP映射是一个字符串,要在页面的grid中显示就麻烦了。

      先看看config文件:

  <connectionStrings>
        <add name="ServerAddress"      connectionString="12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231"/>
  </connectionStrings>

     再看看要实现的效果:

       本来用一张表来实现的话就非常容易了可是现在没办法已经写到config文件中了,我也只好从config中来读取了。在config文件中修改信息可以用ConfigurationManager和WebConfigurationManager类两种方法,可以参考 http://www.cnblogs.com/plin2008/archive/2009/07/10/1520556.html
       首先是读取config文件以List形式返回
       /// <summary>
        ///获得所有的serveradress,以List形式返回
        /// </summary>
        public List<AdressClass> getAllServerAdress()
        {
            AdressClass adrClass;
            List<AdressClass> adressList = new List<AdressClass>();
            //读取web.config文件中的ServerAdress,以string类型返回
            string allIpStr = ConfigurationManager.ConnectionStrings["ServerAddress"].ConnectionString.ToString();
            //根据ServerAdress的固定格式确定的分割方法是‘,’,‘:’
            char[] reg = { ',', ';' };
            string[] ipArray = allIpStr.Split(reg);
            //给定在List中的序号,为了添加、删除、修改时确定修改的位置
            int index = 0;
            for (int i = 0; i < ipArray.Length-1; i += 2)
            {
                //实例化adrClass
                adrClass = new AdressClass(index,ipArray[i], ipArray[i + 1]);
                //将它添加到List中
                adressList.Add(adrClass);
                index += 1;
            }
            return adressList;
        }
然后将取得的List转成DataSet
        /// <summary>
        ///获得所有的serveradress,以DataSet形式放回,以便绊定到ASPxGridView中
        /// </summary>
        public DataSet getAllAdress()
        {
            DataSet allAdressSet = new DataSet();
            //获得ServerAdress的List
            List<AdressClass> allIpList = getAllServerAdress();
            //将List转换成Dataset
            allAdressSet = convertListToDataSet(allIpList);
            return allAdressSet;
        }
        /// <summary>
        ///将List转成DataSet
        /// </summary>
        public DataSet convertListToDataSet(List<AdressClass> ipList){
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            DataRow dr;
            //新增三列
            DataColumn colItem0 = new DataColumn("id", Type.GetType("System.Int32"));
            DataColumn colItem1 = new DataColumn("lanIp", Type.GetType("System.String"));
            DataColumn colItem2 = new DataColumn("wanIp", Type.GetType("System.String"));
            //将他们添加到DataTable中
            dt.Columns.Add(colItem0);
            dt.Columns.Add(colItem1);
            dt.Columns.Add(colItem2);
            foreach (AdressClass adrc in ipList)
            {
                //循环List给DataTable的每一行赋值
                dr = dt.NewRow();
                dr["id"] = adrc.Id ;
                dr["lanIp"] = adrc.LanIp;
                dr["wanIp"] = adrc.WanIp;
                dt.Rows.Add(dr);
            }
            //将该DataTable添加到DataSet中
            ds.Tables.Add(dt);
            return ds;
        }
    在转换的过程中值得注意的是,table的列要对齐了,不然转不过去。转换成DataSet后绑定就是小菜一碟了没有必要再废话了。
    最后就是要把他写回到config文件中了。这也挺简单的可以参考上面的那个链接。下面是我写的,可以参考一下。
         /// <summary>
        ///写回到config文件中
        /// </summary>
        public void writeToConfig(List<AdressClass> adressList)
        {
            string allIpStr = "";
            foreach (AdressClass adrc in adressList)
            {
                //将List<AdressClass> 拆成string写回到config中
                allIpStr += adrc.LanIp + "," + adrc.WanIp + ";";
            }
            //用ConfigurationManager类也能实现将上面的string写回到config中
            //Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
           // Configuration config = ConfigurationManager.OpenExeConfiguration("~");
           /* if (ConfigurationManager.ConnectionStrings["test"] != null)
            {
                config.ConnectionStrings.ConnectionStrings.Remove("test");
                config.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("ConnectionStrings");
            }*/
            //打开config文件
            Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
            //找到属性connectionStrings
            ConnectionStringsSection conSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
            //找到name为ServerAdress的string串
            conSection.ConnectionStrings["ServerAddress"].ConnectionString = allIpStr;
            //保存修改后的config文件
            config.Save();
        }
        最后还要说一句,我是将一个公网地址和他对应的内网地址看做一个对象来处理的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值