日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

部门选择控件源代码公布

發(fā)布時(shí)間:2023/12/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 部门选择控件源代码公布 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為了答謝大家對(duì)無(wú)須迭代兩個(gè)循環(huán)完成樹(shù)結(jié)構(gòu)構(gòu)建的支持特公布這兩天新寫(xiě)的部門選擇控件源代碼,該控件最早是用一個(gè)用戶控件實(shí)現(xiàn)數(shù)據(jù)調(diào)用采用Linq界面采用AtlasControlToolkit PopupControl實(shí)現(xiàn),但后來(lái)發(fā)現(xiàn)效率非常低,最近對(duì)其進(jìn)行了很大的優(yōu)化,數(shù)據(jù)調(diào)用優(yōu)化,控件形式優(yōu)化.

該控件采用了Nikhil Kothari的Atlas M2.2 - Dynamic UpdatePanels (finally)的UpdatePanels within Composite Controls原型 here.并對(duì)其進(jìn)行了部分改動(dòng),在這里謝謝了.

web頁(yè)面截圖如下:

?

IPartialRenderingCompositeControl接口沒(méi)動(dòng)

public interface IPartialRenderingCompositeControl
{
????void RenderUpdatePanel(CompositionUpdatePanel updatePanel, HtmlTextWriter writer);
}

CompositionUpdatePanel修改了內(nèi)嵌類Template的代碼

public class CompositionUpdatePanel : UpdatePanel
{
????private IPartialRenderingCompositeControl _compositeControl;
????private ContentControl _content;
????public CompositionUpdatePanel(IPartialRenderingCompositeControl compositeControl)
????{
???? _compositeControl = compositeControl;
???? _content = new ContentControl();
???? ContentTemplate = new Template(_content);
????}
????public Control Content
????{
???? get
???? {
????????return _content;
???? }
????}
????protected override void OnInit(EventArgs e)
????{
???? base.OnInit(e);
???? Controls.Clear();
???? Controls.Add(_content);
????}
????private class Template : ITemplate
????{
???? private ContentControl _ContentControl;
???? public Template(ContentControl content)
???? {
????????_ContentControl = content;
???? }
???? public void InstantiateIn(Control container)
???? {
????????container.Controls.Add(_ContentControl);
???? }
????}
????private class ContentControl : Control
????{
???? protected override void Render(HtmlTextWriter writer)
???? {
????????CompositionUpdatePanel updatePanel = (CompositionUpdatePanel)Parent;
????????if (updatePanel._compositeControl != null)
????????{
???????? updatePanel._compositeControl.RenderUpdatePanel(updatePanel, writer);
????????}
????????else
????????{
???????? base.RenderChildren(writer);
????????}
???? }
????}
}

樹(shù)圖代碼:

[ToolboxData("<{0}:DepartmentTreeView runat=server></{0}:DepartmentTreeView>")]
public class DepartmentTreeView : CompositeControl, IPartialRenderingCompositeControl
{
????private CompositionUpdatePanel _Container;
????private TreeView _DepartmentTreeView;
????public event EventHandler DepartmentIDChanged;
????public Nullable<Guid> DepartmentID
????{
???? get
???? {
????????return (Nullable<Guid>)this.ViewState["DepartmentID"];
???? }
???? set
???? {
????????if ((Nullable<Guid>)this.ViewState["DepartmentID"] != value)
????????{
???????? this.ViewState["DepartmentID"] = value;
???????? if (value.HasValue)
???????? {
????????????AIO.Web.Utils.TreeViewUtils.TreeViewSelectValue(_DepartmentTreeView, value.Value.ToString());
????????????this.ViewState["DepartmentName"] = _DepartmentTreeView.SelectedNode.Text;
???????? }
???????? else
???????? {
????????????if (_DepartmentTreeView.SelectedNode != null)
????????????{
???????????? _DepartmentTreeView.SelectedNode.Selected = false;
???????????? this.ViewState["DepartmentName"] = String.Empty;
????????????}
???????? }
????????}
???? }
????}
????public string DepartmentName
????{
???? get
???? {
????????return (string)this.ViewState["DepartmentName"];
???? }
????}
????public void ClearSelected()
????{
???? if(_DepartmentTreeView.SelectedNode != null)
???? {
????????_DepartmentTreeView.SelectedNode.Selected = false;
???? }
????}
????protected void BuildTree()
????{
???? _DepartmentTreeView.Nodes.Clear();
???? _DepartmentTreeView.Nodes.Add(new TreeNode("Null"));
???? DataSet ds = AIO.WIT.Data.DepartmentDataObject.ReadCore();
???? int
???? TreeNode[] Nodes = new TreeNode[Count + 1];
???? Nullable<int>[] ParentSQNs = new Nullable<int>[Count + 1];
???? foreach (DataRow dr in ds.Tables[0].Rows)
???? {
????????Nodes[((int)dr["DepartmentSQN"])] = new TreeNode((string)dr["DepartmentName"], ((Guid)dr["DepartmentID"]).ToString());
????????if (dr["ParentSQN"].GetType() == typeof(DBNull))
????????{
???????? ParentSQNs[(int)dr["DepartmentSQN"]] = null;
????????}
????????else
????????{
???????? ParentSQNs[(int)dr["DepartmentSQN"]] = (int)dr["ParentSQN"];
????????}
???? }
???? for (int i = 1; i < Count + 1; i++)
???? {
????????if (ParentSQNs[i].HasValue)
????????{
???????? Nodes[ParentSQNs[i].Value].ChildNodes.Add(Nodes[i]);
????????}
????????else
????????{
???????? _DepartmentTreeView.Nodes.Add(Nodes[i]);
????????}
???? }
????}
????protected override void OnInit(EventArgs e)
????{
???? base.OnInit(e);
????}
????protected override void CreateChildControls()
????{
???? _Container = new CompositionUpdatePanel(this);
???? _Container.Mode = UpdatePanelMode.Conditional;
???? _Container.RenderMode = UpdatePanelRenderMode.Inline;
???? _Container.ID = "Container";
???? Controls.Add(_Container);
???? _DepartmentTreeView = new TreeView();
???? _DepartmentTreeView.ID = "DepartmentTreeView";
???? BuildTree();
???? _DepartmentTreeView.SelectedNodeChanged += delegate(object sender, EventArgs e)
???? {
????????if (_DepartmentTreeView.SelectedNode.Text == "Null")
????????{
???????? this.ViewState["DepartmentID"] = null;
???????? this.ViewState["DepartmentName"] = String.Empty;
????????}
????????else
????????{
???????? this.ViewState["DepartmentID"] = new Guid(_DepartmentTreeView.SelectedNode.Value);
???????? this.ViewState["DepartmentName"] = _DepartmentTreeView.SelectedNode.Text;
????????}
????????if (DepartmentIDChanged != null)
????????{
???????? DepartmentIDChanged(this, new EventArgs());
????????}
???? };
???? _Container.Content.Controls.Add(_DepartmentTreeView);
????}
????void IPartialRenderingCompositeControl.RenderUpdatePanel(CompositionUpdatePanel updatePanel, HtmlTextWriter writer)
????{
???? _DepartmentTreeView.RenderControl(writer);
????}
}

部門選擇代碼:

?

[ToolboxData("<{0}:DepartmentSelect runat=server></{0}:DepartmentSelect>")]
public class DepartmentSelect : CompositeControl, IPartialRenderingCompositeControl
{
????private CompositionUpdatePanel _Container;
????private TextBox _DepartmentTextBox;
????private Panel _DepartmentTreeViewPanel;
????private DepartmentTreeView _DepartmentTreeView;
????private PopupControlExtender _PopupControlExtender;
????private PopupControlProperties _PopupControlProperties;
????public Nullable<Guid> DepartmentID
????{
???? get
???? {
????????return _DepartmentTreeView.DepartmentID;
???? }
???? set
???? {
????????_DepartmentTreeView.DepartmentID = value;
???? }
????}
????protected override void OnInit(EventArgs e)
????{
???? base.OnInit(e);
????}
????protected override void CreateChildControls()
????{
???? _Container = new CompositionUpdatePanel(this);
???? _Container.Mode = UpdatePanelMode.Conditional;
???? _Container.RenderMode = UpdatePanelRenderMode.Inline;
???? _Container.ID = "Container";
???? Controls.Add(_Container);
???? _DepartmentTextBox = new TextBox();
???? _DepartmentTextBox.ID = "DepartmentTextBox";
???? _Container.Content.Controls.Add(_DepartmentTextBox);
???? _DepartmentTreeViewPanel = new Panel();
???? _DepartmentTreeViewPanel.ID = "DepartmentTreeViewPanel";
???? _DepartmentTreeViewPanel.CssClass = "PopupControl";
???? _DepartmentTreeView = new DepartmentTreeView();
???? _DepartmentTreeView.ID = "DepartmentTreeView";
???? _DepartmentTreeView.DepartmentIDChanged += delegate(object sender, EventArgs e)
???? {
????????_DepartmentTextBox.Text = _DepartmentTreeView.DepartmentName;
????????_DepartmentTreeView.ClearSelected();
????????_PopupControlExtender.Commit(_DepartmentTreeView.DepartmentName);
???? };
???? _DepartmentTreeViewPanel.Controls.Add(_DepartmentTreeView);
???? _Container.Content.Controls.Add(_DepartmentTreeViewPanel);
???? _PopupControlProperties = new PopupControlProperties();
???? _PopupControlProperties.ID = "PopupControlProperties";
???? _PopupControlProperties.TargetControlID = "DepartmentTextBox";
???? _PopupControlProperties.PopupControlID = "DepartmentTreeViewPanel";
???? _PopupControlProperties.Position = PopupControlPopupPosition.Bottom;
???? _PopupControlExtender = new PopupControlExtender();
???? _PopupControlExtender.ID = "PopupControlExtender";
???? _PopupControlExtender.TargetProperties.Add(_PopupControlProperties);
???? Controls.Add(_PopupControlExtender);
????}
????void IPartialRenderingCompositeControl.RenderUpdatePanel(CompositionUpdatePanel updatePanel, HtmlTextWriter writer)
????{
???? _DepartmentTextBox.RenderControl(writer);
???? _DepartmentTreeViewPanel.RenderControl(writer);
???? _PopupControlExtender.RenderControl(writer);
????}
}

TreeViewUtils代碼:

?

public class TreeViewUtils
{
????public static void TreeViewExpandToSelected(TreeView tv)
????{
???? TreeNode tmp = tv.SelectedNode;
???? if (tmp != null)
???? {
????????while (tmp.Parent != null)
????????{
???????? tmp = tmp.Parent;
???????? tmp.Expand();
????????}
???? }
????}
????public static Boolean TreeViewSelectValue(TreeView tv, string value)
????{
???? Boolean bResult = false;
???? foreach (TreeNode tr in tv.Nodes)
???? {
????????if (TreeViewSelectValue(tr, value))
????????{
???????? bResult = true;
???????? break;
????????}
???? }
???? if (bResult)
???? {
????????TreeViewExpandToSelected(tv);
???? }
???? else
???? {
????????if (tv.SelectedNode != null)
????????{
???????? tv.SelectedNode.Selected = false;
????????}
???? }
???? return bResult;
????}
????protected static Boolean TreeViewSelectValue(TreeNode tr, string value)
????{
???? if (tr.Value == value)
???? {
????????tr.Selected = true;
????????return true;
???? }
???? foreach (TreeNode test in tr.ChildNodes)
???? {
????????if (TreeViewSelectValue(test, value))
????????{
???????? return true;
????????}
???? }
???? return false;
????}
}

?數(shù)據(jù)庫(kù)訪問(wèn)代碼:

[DataObject(true)]
public class DepartmentDataObject
{
????[DataObjectMethod(DataObjectMethodType.Select, true)]
????public static DataSet ReadCore()
????{
???? Database db = DatabaseFactory.CreateDatabase("WorkItemTrack");
???? string sqlCommand = "Department_SelectCore";
???? DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
???? db.AddReturnValueParameter(dbCommand);
???? return db.ExecuteDataSet(dbCommand);
????}
}

存儲(chǔ)過(guò)程代碼:

ALTER PROCEDURE dbo.Department_SelectCore ????
AS
????SET NOCOUNT ON
SELECT
Department.DepartmentID,
Department.DepartmentSQN,
Department.DepartmentName,
Department.ParentID,
Parent.DepartmentSQN AS ParentSQN
FROM Department
LEFT OUTER JOIN Department AS Parent ON Parent.DepartmentID = Department.ParentID
ORDER BY Department.DepartmentSQN
????RETURN

?

表格:

?

DepartmentID uniqueidentifier,
DepartmentSQN int,
DepartmentName nvarchar(32),
ParentID uniqueidentifier

完整代碼下載DepartmentSelect.rar

轉(zhuǎn)載于:https://www.cnblogs.com/Bolik/archive/2006/09/11/501141.html

總結(jié)

以上是生活随笔為你收集整理的部门选择控件源代码公布的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。