ARTICLE

Building the ListBoxesFT_C ASP.NET Web User Control in Visual Studio 2005: Part IV

Posted by Michael Livshitz Articles | Visual C# November 11, 2006
In multi-part article, I share how you can build your own ASP.NET web user control.
Reader Level:

The full text of the ListBoxesFT_C.ascx.cs is the following (the comments to the code you can find in the part 1, part 2 and part 3):

 

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class UserControls_ListBoxesFT_C : System.Web.UI.UserControl

{

    #region "forClass"

    int _WidthLB = 60;

    int _HeightLB = 120;

    string _LabelFrom = ">>";

    string _LabelTo = "<<";

    DataTable _DT_In = null;

    DataTable _DT_Out = null ;

    bool _Client = false;

    bool _SortByText = true;

    int _SortBy = 1;

    

    #endregion

 

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            buildListBox(ListBoxFrom, _DT_In);

            buildListBox(ListBoxTo, _DT_Out);

            if (_Client)

            {

                fillHidden(_DT_In, HiddenFromText, HiddenFromValue);

                fillHidden(_DT_Out, HiddenToText, HiddenToValue);

            }

        }

        else

        {

            if (_Client)

            {

                getDT_Hidden();

                buildListBox(ListBoxFrom, _DT_In);

                buildListBox(ListBoxTo, _DT_Out);

            }

        }

    }

    protected void Page_PreRender(object sender, EventArgs e)

    {

        if (IsPostBack)

        { return; }

        ListBoxFrom.Width = Unit.Pixel(_WidthLB);

        ListBoxFrom.Height = Unit.Pixel(_HeightLB);

        ListBoxTo.Width = Unit.Pixel(_WidthLB);

        ListBoxTo.Height = Unit.Pixel(_HeightLB);

        ButtonFrom.Text = _LabelFrom;

        ButtonTo.Text = _LabelTo ;

        ButtonHTMLFrom.Value = _LabelFrom;

        ButtonHTMLTo.Value = _LabelTo;

        ButtonFrom.Visible = false;

        ButtonTo.Visible = false;

        ButtonHTMLFrom.Visible = false;

        ButtonHTMLTo.Visible = false;

        if (_Client)

        {

            ButtonHTMLFrom.Visible = true;

            ButtonHTMLTo.Visible = true;

            ButtonHTMLFrom.Attributes.Add("onClick",

                "javascript:ButtonHTML_onclick(" +

                this.Parent.ID + "." + FindControl(ListBoxFrom.ID).ClientID + "," +

                this.Parent.ID + "." + FindControl(ListBoxTo.ID).ClientID + "," +

                this.Parent.ID + "." + FindControl(HiddenToText.ID).ClientID + "," +

                this.Parent.ID + "." + FindControl(HiddenToValue.ID).ClientID + "," +

                this.Parent.ID + "." + FindControl(HiddenFromText.ID).ClientID + "," +

                this.Parent.ID + "." + FindControl(HiddenFromValue.ID).ClientID + "," +

                _SortByText.ToString().ToLower() + "," + "true" + ")");

            ButtonHTMLTo.Attributes.Add("onClick",

                "javascript:ButtonHTML_onclick(" +

                this.Parent.ID + "." + FindControl(ListBoxFrom.ID).ClientID + "," +

                this.Parent.ID + "." + FindControl(ListBoxTo.ID).ClientID + "," +

                this.Parent.ID + "." + FindControl(HiddenToText.ID).ClientID + "," +

                this.Parent.ID + "." + FindControl(HiddenToValue.ID).ClientID + "," +

                this.Parent.ID + "." + FindControl(HiddenFromText.ID).ClientID + "," +

                this.Parent.ID + "." + FindControl(HiddenFromValue.ID).ClientID + "," +

                _SortByText.ToString().ToLower() + "," + "false" + ")");

        }

        else

        {

            ButtonFrom.Visible = true;

            ButtonTo.Visible = true;

        }

    }

   

    #region "properties"

 

    public int C_SortBy

    {

        get { return _SortBy; }

        set { _SortBy = value; }

    }

    public int C_WidthLB

    {

        get { return _WidthLB; }

        set { _WidthLB = value; }

    }

    public int C_HeightLB

    {

        get { return _HeightLB; }

        set { _HeightLB = value; }

    }

    public string C_LabelFrom

    {

        get { return _LabelFrom; }

        set { _LabelFrom = value; }

    }

    public string C_LabelTo

    {

        get { return _LabelTo; }

        set { _LabelTo = value; }

    }

    public bool  C_Client

    {

        get { return _Client; }

        set { _Client = value; }

    }

    public bool C_SortByText

    {

        get { return _SortByText; }

        set { _SortByText = value; }

    }

    public DataTable C_DataIn

    {

        set

        {

            _DT_In = dataTable_Sort ( value);

            //Clones the structure of the _DT_In DataTable

            _DT_Out = _DT_In.Clone();

            //here you can set default value for the _DT_Out

        }

    }

    public DataTable C_DataOut

    {

        get{return _DT_Out;}

    }

    #endregion

 

//-----------------------------------------------------------------

    private DataTable dataTable_Sort(DataTable dt)

    {

        DataView dv;

        DataTable dtHelp;

        DataRow dr;

        int iCount = 0;

        int iMax = dt.Rows.Count;

 

        dtHelp = dt.Copy();

        dv = dtHelp.DefaultView;

        dv.Sort = dt.Columns[_SortBy].Caption  ;

        dt.Clear();

        for (iCount = 0; iCount < iMax; iCount++)

        {

            dr = dt.NewRow();

            dr[0]= dv[iCount][0];

            dr[1] = dv[iCount][1];

            dt.Rows.Add(dr);

        }

        return dt;

    }

//-----------------------------------------------------

    private void fillHidden(DataTable dt,

                            HtmlInputHidden HiddenText,

                            HtmlInputHidden HiddenValue)

    {

        int iCount;

        int iMax;

        string sHiddenText = "";

        string sHiddenValue = "";

        string sText = "";

        string sValue = "";

 

        iMax = dt.Rows.Count;

        for (iCount = 0; iCount < iMax; iCount++)

        {

            sText = dt.Rows[iCount][1].ToString().Trim();

            sValue =dt.Rows [iCount ][0].ToString().Trim();

            sHiddenText += sText;

            sHiddenValue += sValue;

            if (iCount != (iMax - 1))

            {

                sHiddenText += ",";

                sHiddenValue += ",";

            }

        }

        HiddenText.Value = sHiddenText;

        HiddenValue.Value = sHiddenValue;

    }

    //-----------------------------------------------------

    private void getDT_Hidden()

    {

        Array arrFromText;

        Array arrFromValue;

        Array arrToText;

        Array arrToValue;

        char[] separator ={ ',' };

        DataRow dr;

        int iCount;

        int iMax;

 

        arrFromText = HiddenFromText.Value.ToString().Trim().Split(separator);

        arrFromValue = HiddenFromValue.Value.ToString().Trim().Split(separator);

        iMax = arrFromText.Length;

        _DT_In.Clear();

        for (iCount = 0; iCount < iMax; iCount++)

        {

            dr = _DT_In.NewRow();

            dr[0] = arrFromValue.GetValue(iCount);

            dr[1] = arrFromText.GetValue(iCount);

            if (arrFromValue.GetValue(iCount).ToString().Trim() != ""

                        && arrFromText.GetValue(iCount).ToString().Trim() != "")

            {

                _DT_In.Rows.Add(dr);

            }

        }

 

        arrToText = HiddenToText.Value.ToString().Trim().Split(separator);

        arrToValue = HiddenToValue.Value.ToString().Trim().Split(separator);

        iMax = arrToText.Length;

        _DT_Out.Clear();

        for (iCount = 0; iCount < iMax; iCount++)

        {

            dr = _DT_Out.NewRow();

            dr[0] = arrToValue.GetValue(iCount);

            dr[1] = arrToText.GetValue(iCount);

            if (arrToValue.GetValue(iCount).ToString ().Trim () != ""

                        && arrToText.GetValue(iCount).ToString().Trim() != "")

            {

                _DT_Out.Rows.Add(dr);

            }

        }

    }

    private void onClickFromTo(bool clickFrom)

    {

        ListBox lb;

        DataTable dtFrom;

        DataTable dtTo;

        int iItemsList = 0;

        int iCount = 0;

        int iCountHelp = 0;

        if (clickFrom)

        {

            lb = ListBoxFrom;

            dtFrom = _DT_In;

            dtTo = _DT_Out;

        }

        else

        {

            lb = ListBoxTo;

            dtFrom = _DT_Out;

            dtTo = _DT_In;

        }

        iItemsList = lb.Items.Count;

        for (iCount = 0; iCount < iItemsList; iCount++)

        {

            if (lb.Items[iCount].Selected)

            {

                DataRow dr;

                dr = dtTo.NewRow();

                dr[0] = dtFrom.Rows[iCount - iCountHelp][0];

                dr[1] = dtFrom.Rows[iCount - iCountHelp][1];

                dtTo.Rows.Add(dr);

                dtFrom.Rows[iCount - iCountHelp].Delete();

                iCountHelp = iCountHelp + 1;

            }

        }

        if (clickFrom)

        {

            _DT_In =  dataTable_Sort( dtFrom.Copy());

            _DT_Out = dataTable_Sort ( dtTo.Copy());

        }

        else

        {

            _DT_Out = dataTable_Sort( dtFrom.Copy());

            _DT_In = dataTable_Sort( dtTo.Copy());

        }

        buildListBox(ListBoxFrom,_DT_In );

        buildListBox(ListBoxTo,_DT_Out );

    }

    //--------------------------------------------------------------

    private void buildListBox(ListBox lb,DataTable dt)

    {

        lb.DataTextField = dt.Columns[1].Caption;

        lb.DataValueField = dt.Columns[0].Caption;

        lb.DataSource = dt;

        lb.DataBind();

    }

    //---------------------------------------------------------------

    protected override void LoadViewState(object VS_saved)

    {

        if (VS_saved != null)

        {

            object[] VS_all = (object[])VS_saved;

            if (VS_all[0] != null)

            {

                base.LoadViewState(VS_all[0]);

            }

            if (VS_all[1] != null)

            {

                _DT_In = (DataTable)VS_all[1];

            }

            if (VS_all[2] != null)

            {

                _DT_Out = (DataTable)VS_all[2];

            }

            if (VS_all[3] != null)

            {

                _Client = (bool)VS_all[3];

            }

            if (VS_all[4] != null)

            {

                _SortBy = (int)VS_all[4];

            }

            if (VS_all[5] != null)

            {

                _WidthLB = (int)VS_all[5];

            }

            if (VS_all[6] != null)

            {

                _HeightLB = (int)VS_all[6];

            }

            if (VS_all[7] != null)

            {

                _LabelFrom = (string)VS_all[7];

            }

            if (VS_all[8] != null)

            {

                _LabelTo = (string)VS_all[8];

            }

            if (VS_all[9] != null)

            {

                _SortByText = (bool)VS_all[9];

            }

        }

    }

 

    protected override object SaveViewState()

    {

        object VS_base = base.SaveViewState();

        object[] VS_all = new object[10];

        VS_all[0] = VS_base;

        VS_all[1] = _DT_In;

        VS_all[2] = _DT_Out;

        VS_all[3] = _Client;

        VS_all[4] = _SortBy;

        VS_all[5] = _WidthLB;

        VS_all[6] = _HeightLB;

        VS_all[7] = _LabelFrom;

        VS_all[8] = _LabelTo;

        VS_all[9] = _SortByText;

        return VS_all;

    }

    //---------------------------------------------------------------

    protected void ButtonFrom_Click(object sender, EventArgs e)

    {

        onClickFromTo(true);       

    }

    protected void ButtonTo_Click(object sender, EventArgs e)

    {

        onClickFromTo(false );

    }

}

            OK! Now we can pass to testing of our control (part 5).

 

Good luck in programming !

COMMENT USING