您的位置:首页 > 其它

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

2010-05-28 15:03 190 查看
编程时老是会遇到一些可笑的事情。刚做的一个公网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类两种方法,可以参考/article/6046612.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();
}
最后还要说一句,我是将一个公网地址和他对应的内网地址看做一个对象来处理的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: