基本上,一个Project中我们使用的控件风格都是一致的,比如DataGrid控件,他的页眉,页脚,行的字体颜色,交替行的背景色等等,我们不太可能每次使用这个控件都去设置一次这些属性,这绝对是一件很烦人的事。通常情况下我们会使用css来定义这些风格,然后再去分别定义DataGrid的ItemStyle,HeaderStyle等等的css属性,不过即便如此,几次这样的经历后,我还是觉得这实在是一件很烦人的事情,为什么不可以我不去设置这些风格属性,而他们每次都保持我所需要的风格呢?
通过继承标准DataGrid控件,可以来比较轻易的实现这个需求,我要做的就是读取某个xml文件或者config文件里面的样式设定(这种情况下一般不使用web.config文件,因为修改风格绝对是一件常见的事情,但是如果放入web.config中,每次修改web.config都引起应用程序重启,这可不太好.)
由于只涉及风格的显示,因此只需要重载OnPreRender
如下面类似的代码:
if(cache["TSDataGridConfig"] == null) { try { string configFilePath = HttpContext.Current.Server.MapPath (HttpContext.Current.Request.ApplicationPath) ; configFilePath += "//" + ConfigFilePath; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(configFilePath); XmlNodeList nodeList = xmlDoc.SelectNodes("SiteConfig/TSDataGrid")[0].ChildNodes; Hashtable configTable = Hashtable.Synchronized(new Hashtable()); for(int i = 0,j = nodeList.Count; i < j;i++) { //只过滤Element节点,去掉其他节点,例如Comment if(nodeList[i].NodeType == XmlNodeType.Element) configTable.Add(nodeList[i].Name,nodeList[i].InnerText); } cache.Insert("TSDataGridConfig",configTable,new CacheDependency(configFilePath)); } catch { return; } } if(cache["TSDataGridConfig"] != null) {...}
if(cache["TSDataGridConfig"] != null){...}
这段代码中作的就是从一个.config文件中读取了相关的配置节,并且存入Cache中,一旦修改了.config文件,则立即重新读取,接下来在if(cache["TSDataGridConfig"] != null){}块中要做的就是将对应的配置节点的值设置到DataGrid的相关属性,例如://AlternatingItem-BackColor if(CheckItem(configList["AlternatingItem-BackColor"])) base.AlternatingItemStyle.BackColor = Color.FromName((string)configList["AlternatingItem-BackColor"]); //CheckItem主要是判断AlternatingItem-BackColor是不是null或者值是不是String.Empty,如果是,就不设置
基本上我们已经可以使用这个控件来代替原来的标准DataGrid了,末了,还有一件比较浪费体力的事情,那就是DataGrid项的删除确认,因此可以继续在这里重载OnItemDataBound,类似代码如下:
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { if((e.Item.FindControl("lbtnDelete") != null && e.Item.FindControl("lbtnDelete").GetType().ToString() == "System.Web.UI.WebControls.LinkButton")) ((LinkButton)e.Item.FindControl("lbtnDelete")).Attributes["onclick"] = "return confirm('即将删除指定项,确认?')"; } base.OnItemDataBound(e);
这里,我将删除的LinkButton ID假定为lbtnDelete,当然可以公开成一个属性了,不过我比较懒,因为我们还可以继续在调用页重载这个事件,如果我们确实需要的话....这样只要调用页用来执行删除Command的LinkButton Id为lbtnDelete,将会自动触发删除确认,不需要我们每次都去重复编写这段代码了.
DataGrid风格配置节片断:
<TSDataGrid> <!-- 交替项 --> <!-- 交替项 --> <AlternatingItem-BackColor>#F9FFED</AlternatingItem-BackColor> <AlternatingItem-ForeColor></AlternatingItem-ForeColor> .... </TSDataGrid>
基本上,一个Project中我们使用的控件风格都是一致的,比如DataGrid控件,他的页眉,页脚,行的字体颜色,交替行的背景色等等,我们不太可能每次使用这个控件都去设置一次这些属性,这绝对是一件很烦人的事。通常情况下我们会使用css来定义这些风格,然后再去分别定义DataGrid的ItemStyle,HeaderStyle等等的css属性,不过即便如此,几次这样的经历后,我还是觉得这实在是一件很烦人的事情,为什么不可以我不去设置这些风格属性,而他们每次都保持我所需要的风格呢?
通过继承标准DataGrid控件,可以来比较轻易的实现这个需求,我要做的就是读取某个xml文件或者config文件里面的样式设定(这种情况下一般不使用web.config文件,因为修改风格绝对是一件常见的事情,但是如果放入web.config中,每次修改web.config都引起应用程序重启,这可不太好.)
由于只涉及风格的显示,因此只需要重载OnPreRender
如下面类似的代码:
if(cache["TSDataGridConfig"] == null) { try { string configFilePath = HttpContext.Current.Server.MapPath (HttpContext.Current.Request.ApplicationPath) ; configFilePath += "//" + ConfigFilePath; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(configFilePath); XmlNodeList nodeList = xmlDoc.SelectNodes("SiteConfig/TSDataGrid")[0].ChildNodes; Hashtable configTable = Hashtable.Synchronized(new Hashtable()); for(int i = 0,j = nodeList.Count; i < j;i++) { //只过滤Element节点,去掉其他节点,例如Comment if(nodeList[i].NodeType == XmlNodeType.Element) configTable.Add(nodeList[i].Name,nodeList[i].InnerText); } cache.Insert("TSDataGridConfig",configTable,new CacheDependency(configFilePath)); } catch { return; } } if(cache["TSDataGridConfig"] != null) {...}
if(cache["TSDataGridConfig"] != null){...}
这段代码中作的就是从一个.config文件中读取了相关的配置节,并且存入Cache中,一旦修改了.config文件,则立即重新读取,接下来在if(cache["TSDataGridConfig"] != null){}块中要做的就是将对应的配置节点的值设置到DataGrid的相关属性,例如://AlternatingItem-BackColor if(CheckItem(configList["AlternatingItem-BackColor"])) base.AlternatingItemStyle.BackColor = Color.FromName((string)configList["AlternatingItem-BackColor"]); //CheckItem主要是判断AlternatingItem-BackColor是不是null或者值是不是String.Empty,如果是,就不设置
基本上我们已经可以使用这个控件来代替原来的标准DataGrid了,末了,还有一件比较浪费体力的事情,那就是DataGrid项的删除确认,因此可以继续在这里重载OnItemDataBound,类似代码如下:
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { if((e.Item.FindControl("lbtnDelete") != null && e.Item.FindControl("lbtnDelete").GetType().ToString() == "System.Web.UI.WebControls.LinkButton")) ((LinkButton)e.Item.FindControl("lbtnDelete")).Attributes["onclick"] = "return confirm('即将删除指定项,确认?')"; } base.OnItemDataBound(e);
这里,我将删除的LinkButton ID假定为lbtnDelete,当然可以公开成一个属性了,不过我比较懒,因为我们还可以继续在调用页重载这个事件,如果我们确实需要的话....这样只要调用页用来执行删除Command的LinkButton Id为lbtnDelete,将会自动触发删除确认,不需要我们每次都去重复编写这段代码了.
DataGrid风格配置节片断:
<TSDataGrid> <!-- 交替项 --> <!-- 交替项 --> <AlternatingItem-BackColor>#F9FFED</AlternatingItem-BackColor> <AlternatingItem-ForeColor></AlternatingItem-ForeColor> .... </TSDataGrid>
基本上,一个Project中我们使用的控件风格都是一致的,比如DataGrid控件,他的页眉,页脚,行的字体颜色,交替行的背景色等等,我们不太可能每次使用这个控件都去设置一次这些属性,这绝对是一件很烦人的事。通常情况下我们会使用css来定义这些风格,然后再去分别定义DataGrid的ItemStyle,HeaderStyle等等的css属性,不过即便如此,几次这样的经历后,我还是觉得这实在是一件很烦人的事情,为什么不可以我不去设置这些风格属性,而他们每次都保持我所需要的风格呢?
通过继承标准DataGrid控件,可以来比较轻易的实现这个需求,我要做的就是读取某个xml文件或者config文件里面的样式设定(这种情况下一般不使用web.config文件,因为修改风格绝对是一件常见的事情,但是如果放入web.config中,每次修改web.config都引起应用程序重启,这可不太好.)
由于只涉及风格的显示,因此只需要重载OnPreRender
如下面类似的代码:
if(cache["TSDataGridConfig"] == null) { try { string configFilePath = HttpContext.Current.Server.MapPath (HttpContext.Current.Request.ApplicationPath) ; configFilePath += "//" + ConfigFilePath; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(configFilePath); XmlNodeList nodeList = xmlDoc.SelectNodes("SiteConfig/TSDataGrid")[0].ChildNodes; Hashtable configTable = Hashtable.Synchronized(new Hashtable()); for(int i = 0,j = nodeList.Count; i < j;i++) { //只过滤Element节点,去掉其他节点,例如Comment if(nodeList[i].NodeType == XmlNodeType.Element) configTable.Add(nodeList[i].Name,nodeList[i].InnerText); } cache.Insert("TSDataGridConfig",configTable,new CacheDependency(configFilePath)); } catch { return; } } if(cache["TSDataGridConfig"] != null) {...}
if(cache["TSDataGridConfig"] != null){...}
这段代码中作的就是从一个.config文件中读取了相关的配置节,并且存入Cache中,一旦修改了.config文件,则立即重新读取,接下来在if(cache["TSDataGridConfig"] != null){}块中要做的就是将对应的配置节点的值设置到DataGrid的相关属性,例如://AlternatingItem-BackColor if(CheckItem(configList["AlternatingItem-BackColor"])) base.AlternatingItemStyle.BackColor = Color.FromName((string)configList["AlternatingItem-BackColor"]); //CheckItem主要是判断AlternatingItem-BackColor是不是null或者值是不是String.Empty,如果是,就不设置
基本上我们已经可以使用这个控件来代替原来的标准DataGrid了,末了,还有一件比较浪费体力的事情,那就是DataGrid项的删除确认,因此可以继续在这里重载OnItemDataBound,类似代码如下:
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { if((e.Item.FindControl("lbtnDelete") != null && e.Item.FindControl("lbtnDelete").GetType().ToString() == "System.Web.UI.WebControls.LinkButton")) ((LinkButton)e.Item.FindControl("lbtnDelete")).Attributes["onclick"] = "return confirm('即将删除指定项,确认?')"; } base.OnItemDataBound(e);
这里,我将删除的LinkButton ID假定为lbtnDelete,当然可以公开成一个属性了,不过我比较懒,因为我们还可以继续在调用页重载这个事件,如果我们确实需要的话....这样只要调用页用来执行删除Command的LinkButton Id为lbtnDelete,将会自动触发删除确认,不需要我们每次都去重复编写这段代码了.
DataGrid风格配置节片断:
<TSDataGrid> <!-- 交替项 --> <!-- 交替项 --> <AlternatingItem-BackColor>#F9FFED</AlternatingItem-BackColor> <AlternatingItem-ForeColor></AlternatingItem-ForeColor> .... </TSDataGrid>
基本上,一个Project中我们使用的控件风格都是一致的,比如DataGrid控件,他的页眉,页脚,行的字体颜色,交替行的背景色等等,我们不太可能每次使用这个控件都去设置一次这些属性,这绝对是一件很烦人的事。通常情况下我们会使用css来定义这些风格,然后再去分别定义DataGrid的ItemStyle,HeaderStyle等等的css属性,不过即便如此,几次这样的经历后,我还是觉得这实在是一件很烦人的事情,为什么不可以我不去设置这些风格属性,而他们每次都保持我所需要的风格呢?
通过继承标准DataGrid控件,可以来比较轻易的实现这个需求,我要做的就是读取某个xml文件或者config文件里面的样式设定(这种情况下一般不使用web.config文件,因为修改风格绝对是一件常见的事情,但是如果放入web.config中,每次修改web.config都引起应用程序重启,这可不太好.)
由于只涉及风格的显示,因此只需要重载OnPreRender
如下面类似的代码:
if(cache["TSDataGridConfig"] == null) { try { string configFilePath = HttpContext.Current.Server.MapPath (HttpContext.Current.Request.ApplicationPath) ; configFilePath += "//" + ConfigFilePath; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(configFilePath); XmlNodeList nodeList = xmlDoc.SelectNodes("SiteConfig/TSDataGrid")[0].ChildNodes; Hashtable configTable = Hashtable.Synchronized(new Hashtable()); for(int i = 0,j = nodeList.Count; i < j;i++) { //只过滤Element节点,去掉其他节点,例如Comment if(nodeList[i].NodeType == XmlNodeType.Element) configTable.Add(nodeList[i].Name,nodeList[i].InnerText); } cache.Insert("TSDataGridConfig",configTable,new CacheDependency(configFilePath)); } catch { return; } } if(cache["TSDataGridConfig"] != null) {...}
if(cache["TSDataGridConfig"] != null){...}
这段代码中作的就是从一个.config文件中读取了相关的配置节,并且存入Cache中,一旦修改了.config文件,则立即重新读取,接下来在if(cache["TSDataGridConfig"] != null){}块中要做的就是将对应的配置节点的值设置到DataGrid的相关属性,例如://AlternatingItem-BackColor if(CheckItem(configList["AlternatingItem-BackColor"])) base.AlternatingItemStyle.BackColor = Color.FromName((string)configList["AlternatingItem-BackColor"]); //CheckItem主要是判断AlternatingItem-BackColor是不是null或者值是不是String.Empty,如果是,就不设置
基本上我们已经可以使用这个控件来代替原来的标准DataGrid了,末了,还有一件比较浪费体力的事情,那就是DataGrid项的删除确认,因此可以继续在这里重载OnItemDataBound,类似代码如下:
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { if((e.Item.FindControl("lbtnDelete") != null && e.Item.FindControl("lbtnDelete").GetType().ToString() == "System.Web.UI.WebControls.LinkButton")) ((LinkButton)e.Item.FindControl("lbtnDelete")).Attributes["onclick"] = "return confirm('即将删除指定项,确认?')"; } base.OnItemDataBound(e);
这里,我将删除的LinkButton ID假定为lbtnDelete,当然可以公开成一个属性了,不过我比较懒,因为我们还可以继续在调用页重载这个事件,如果我们确实需要的话....这样只要调用页用来执行删除Command的LinkButton Id为lbtnDelete,将会自动触发删除确认,不需要我们每次都去重复编写这段代码了.
DataGrid风格配置节片断:
<TSDataGrid> <!-- 交替项 --> <!-- 交替项 --> <AlternatingItem-BackColor>#F9FFED</AlternatingItem-BackColor> <AlternatingItem-ForeColor></AlternatingItem-ForeColor> .... </TSDataGrid>
反馈