Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 525775
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T08:42:26+00:00 2026-05-13T08:42:26+00:00

I managed to override the Boundfield to display a dropdownlist if I put it

  • 0

I managed to override the Boundfield to display a dropdownlist if I put it in a Gridview.

protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
    {
        Control child = null;
        Control cellControl = null;

        if ((((rowState & DataControlRowState.Edit) != DataControlRowState.Normal) && !this.ReadOnly) 
            || ((rowState & DataControlRowState.Insert) != DataControlRowState.Normal))
        {
            // If data cell is in edit mode, create DropDownList editor for this cell
            // and set data properties.
            
            DropDownList box = new DropDownList();                
            box.Items.Add(DefaultValueText);               

            box.DataSource = this.GetDataSource();
            box.DataMember = this.BusinessObjectName;
            box.DataTextField = this.DataTextField;
            box.DataValueField = this.DataValueField;
            box.AppendDataBoundItems = true;
            box.ToolTip = this.HeaderText;

            cell.Controls.Add(box);
            box.DataBind();
            // if in edit mode, prepare dropdown for binding
            if ((this.DataField.Length != 0) && ((rowState & DataControlRowState.Edit) != DataControlRowState.Normal))
            {
                cellControl = box;
            }
        }
        else if (this.DataField.Length != 0)    // if in read only mode, prepare cell for binding
        {
            cellControl = cell;
        }

        if ((cellControl != null) && base.Visible)
        {
            cellControl.DataBinding += new EventHandler(this.OnDataBindField);
        }
    }
    

    protected override void OnDataBindField(object sender, EventArgs e)
    {
        Control control = (Control)sender;
        Control namingContainer = control.NamingContainer;
        object dataValue = this.GetValue(namingContainer);
        bool encode = (this.SupportsHtmlEncode && this.HtmlEncode) && (control is TableCell);
        string str = this.FormatDataValue(dataValue, encode);
        if (control is TableCell)
        {
            if (str.Length == 0)
            {
                str = " ";
            }
            ((TableCell)control).Text = str;
        }
        else
        {
            //If data cell is in edit mode, set selected value of DropDownList 
            if (dataValue != null)
            {
                DropDownList dropDownList = (DropDownList) control;
                
                ListItem itm = dropDownList.Items.FindByText(dataValue.ToString());
                if (itm != null)
                {
                    dropDownList.Text = itm.Value;
                }
                else
                    ((DropDownList)control).Text = DefaultValueText;
            }
        }
    }

The last feature I added is a default value/ additional item to display if nothing has been selected, like "please select" for example. I can set this through the property DefaultValueText in the OnDataBind event.

Now here’s the problem I am facing:

In InitializeDataCell, if I set

box.AppendDataBoundItems = true;

and call

box.DataBind();

The dropdownlist has all the items plus the additional default item.
It also works nicely in the OnDataBind event, where I can now select the default if the databound item does not contain a value.

But when the dropdownlist is displayed in the gridview, it contains the default value plus everything from the datasource TWICE, because I set AppendDataBoundItems = true, which leads the dropdown to NOT clear it’s items when items are added
The gridview must be calling databind twice, but it’s only registering once in the OnDataBind event method. I only see one call there, and in that moment, everything is fine, the dropdown contains the default item plus one of each item from the datasource.

Any suggestions where or how I can handle the databinding so that I have full control over the databinding?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T08:42:26+00:00Added an answer on May 13, 2026 at 8:42 am

    I managed to get it working

    I moved all the code for setting the selectedValue to the DataBound event of the DropDownList. In this event, the databinding already happened and the list of values is available for me to set the selectedValue. I don’t call DataBind myself anymore, since it’s being called anyway on the control. I only add the “make a selection” item at the beginning and set AppendDataBoundItems to true.

    There might be unhandled situations now in certain read only states, because I don’t handle any Cell.Databinding() events.

    Complete sourcecode for those who are interested…

    It’s based on the example from Javad Zarrinabadi at CodeProjct

    usage:

    DropDownBoundField dropDownBoundField = new DropDownBoundField();
            dropDownBoundField.HeaderText = "NyColumnName";
            dropDownBoundField.BusinessObjectName = "BusinessLogic.MyDataClass";
            dropDownBoundField.SelectMethod = "GetEnumerable";
            dropDownBoundField.DataTextField = "Name";   // what should be displayed
            dropDownBoundField.DataValueField = "Id";    // value behind the displayed text
            dropDownBoundField.DataField = "IdProperty"; // Property to bind to
            dropDownBoundField.DefaultValueText = "Select";  // text on first item as 
                                                          default if DataField is null            
            dropDownBoundField.FindBy = SetSelectedValueBy.Value  // Choose how the DataField is being evaluated, as source for the value or the text
            GridView.Columns.Add(dropDownBoundField);
    

    Class:

     using System;
     using System.Web.UI.WebControls;
     using System.Web.UI;
     using System.ComponentModel;
     using System.Web;
     using System.Collections.Specialized;
    
    namespace IDVCode.GridViews
    {
    public class DropDownField : BoundField
    {
        #region fields
        private string _listDataSourceID;
        private string _listDataMember;
        private string _listDataTextField;
        private string _listDataValueField;
        #endregion 
    
        #region eventHandler
    
        protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
        {
                DropDownList dropDownList = new DropDownList();
                dropDownList.ToolTip = HeaderText;
                dropDownList.DataSourceID = ListDataSourceID;
                dropDownList.DataMember = ListDataMember;
                dropDownList.DataTextField = ListDataTextField;
                dropDownList.DataValueField = ListDataValueField;
                dropDownList.Enabled = !ReadOnly;
                cell.Controls.Add(dropDownList);
    
                if (rowState == DataControlRowState.Normal || rowState == DataControlRowState.Alternate || ReadOnly)
                {
                    dropDownList.Enabled = false;
                }
                if (DataField.Length != 0) // && ((rowState & DataControlRowState.Edit) != DataControlRowState.Normal))
                {
                    dropDownList.DataBound += new EventHandler(OnDataBindField);
                }
           }
    
        protected override void OnDataBindField(object sender, EventArgs e)
        {
            Control control = (Control)sender;
            Control namingContainer = control.NamingContainer;
            object dataValue = GetValue(namingContainer);
            bool encode = (SupportsHtmlEncode && HtmlEncode) && (control is TableCell);
            string str = FormatDataValue(dataValue, encode);
            if (control is TableCell)
            {
                if (str.Length == 0)
                {
                    str = " ";
                }
                ((TableCell)control).Text = str;
            }
            else
            {
                if (!(control is DropDownList))
                {
                    throw new HttpException("BoundField_WrongControlType");
                }
                if (((DropDownList)control).Items.Count > 0)    // Don't call selectedValue if empty
                {
                    if (dataValue != null)
                    {
                        DropDownList dropDownList = (DropDownList)control;
    
                        ListItem item = null;
                        if (FindBy == SetSelectedValueBy.Value)
                        {
                            item = dropDownList.Items.FindByValue(dataValue.ToString());
                        }
                        else
                        {
                            item = dropDownList.Items.FindByText(dataValue.ToString());
                        }
    
                        if (item != null)
                            dropDownList.Text = item.Value;
                        else
                        {
                            ListItem defaultItem = dropDownList.Items.FindByText(DefaultValueText);
                            if (defaultItem != null)
                                dropDownList.SelectedValue = defaultItem.Value;
                        }
                    }
                }
            }
        }
    
        public override void ExtractValuesFromCell(IOrderedDictionary dictionary, DataControlFieldCell cell,
            DataControlRowState rowState, bool includeReadOnly)
        {
            Control control = null;
            string dataField = DataField;
            object text = null;
            string nullDisplayText = NullDisplayText;
            if (((rowState & DataControlRowState.Insert) == DataControlRowState.Normal) || InsertVisible)
            {
                if (cell.Controls.Count > 0)
                {
                    control = cell.Controls[0];
                    DropDownList box = control as DropDownList;
                    if (box != null)
                    {
                        text = box.SelectedValue;
                    }
                }
                else if (includeReadOnly)
                {
                    string s = cell.Text;
                    if (s == " ")
                    {
                        text = string.Empty;
                    }
                    else if (SupportsHtmlEncode && HtmlEncode)
                    {
                        text = HttpUtility.HtmlDecode(s);
                    }
                    else
                    {
                        text = s;
                    }
                }
                if (text != null)
                {
                    if (((text is string) && (((string)text).Length == 0)) && ConvertEmptyStringToNull)
                    {
                        text = null;
                    }
                    if (((text is string) && (((string)text) == nullDisplayText)) && (nullDisplayText.Length > 0))
                    {
                        text = null;
                    }
                    if (dictionary.Contains(dataField))
                    {
                        dictionary[dataField] = text;
                    }
                    else
                    {
                        dictionary.Add(dataField, text);
                    }
                }
            }
        }
    
        #endregion
    
        #region Properties
    
        public virtual string ListDataSourceID
        {
            get
            {
                if (_listDataSourceID == null)
                {
                    object stateBag = ViewState["ListDataSourceID"];
                    if (stateBag != null)
                    {
                        _listDataSourceID = (string)stateBag;
                    }
                    else
                    {
                        _listDataSourceID = string.Empty;
                    }
                }
                return _listDataSourceID;
            }
            set
            {
                if (!object.Equals(value, ViewState["ListDataSourceID"]))
                {
                    ViewState["ListDataSourceID"] = value;
                    _listDataSourceID = value;
                    OnFieldChanged();
                }
            }
        }
    
        public virtual string ListDataMember
        {
            get
            {
                if (_listDataMember == null)
                {
                    object stateBag = ViewState["ListDataMember"];
                    if (stateBag != null)
                    {
                        _listDataMember = (string)stateBag;
                    }
                    else
                    {
                        _listDataMember = string.Empty;
                    }
                }
                return _listDataMember;
            }
            set
            {
                if (!object.Equals(value, ViewState["ListDataMember"]))
                {
                    ViewState["ListDataMember"] = value;
                    _listDataMember = value;
                    OnFieldChanged();
                }
            }
        }
    
        public virtual string ListDataTextField
        {
            get
            {
                if (_listDataTextField == null)
                {
                    object stateBag = ViewState["ListDataTextField"];
                    if (stateBag != null)
                    {
                        _listDataTextField = (string)stateBag;
                    }
                    else
                    {
                        _listDataTextField = string.Empty;
                    }
                }
                return _listDataTextField;
            }
            set
            {
                if (!object.Equals(value, ViewState["ListDataTextField"]))
                {
                    ViewState["ListDataTextField"] = value;
                    _listDataTextField = value;
                    OnFieldChanged();
                }
            }
        }
    
        public virtual string ListDataValueField
        {
            get
            {
                if (_listDataValueField == null)
                {
                    object stateBag = ViewState["ListDataValueField"];
                    if (stateBag != null)
                    {
                        _listDataValueField = (string)stateBag;
                    }
                    else
                    {
                        _listDataValueField = string.Empty;
                    }
                }
                return _listDataValueField;
            }
            set
            {
                if (!object.Equals(value, ViewState["ListDataValueField"]))
                {
                    ViewState["ListDataValueField"] = value;
                    _listDataValueField = value;
                    OnFieldChanged();
                }
            }
        }
    
        [Description("Sets a default value if applicable")]
        [Category("Appearance")]
        public string DefaultValueText
        {
            get
            {
                object val = ViewState["DefaultValueText"];
                if (val != null)
                {
                    return (string)val;
                }
                return (string.Empty);
            }
    
            set
            {
                ViewState["DefaultValueText"] = value;
            }
        }
    
        [Description("Defines how the SelectedValue is set")]
        [Category("Data")]
        [DefaultValue(SetSelectedValueBy.Value)]
        public SetSelectedValueBy FindBy
        {
            get
            {
                object val = ViewState["SetSelectedValueBy"];
                return val != null ? (SetSelectedValueBy) val : SetSelectedValueBy.Value;
            }
            set
            {
                ViewState["SetSelectedValueBy"] = value;
            }
        }
    
        public enum SetSelectedValueBy
        {
            Text,
            Value
        }
    
        #endregion
    }
    

    }

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm showing a form using Form.ShowDialog() , in this Form I have override void
I have a base page class where i set client target with protected override
I have managed to override a controls WindowProc function in order to determine more
I'm using the Telerik RadSpell control in one of our touchscreen applications. I've managed
Code example: unit Foo; TFoo = class protected FList: TList; // Lifetime is managed
I successfully managed to autoload objects: if I override the __get() method, I can
Well lets say we have this c# code: public override void Write(XDRDestination destination) {
I'm using the Systems.Windows.Forms.Webbrowser control and need to override the download manager. I've followed
I have managed to put a broadcast receiver from the manifest file, it looks
Being an Android newbie experimenting with GPS stuff I managed to put together this

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.