Показать комбо на AspxGridview - PullRequest
0 голосов
/ 21 июля 2010

Я работаю с базой данных northwind.По моему AspxGridview хочу показать comboBox.Я заполняю сетку на заднем конце C# Я также хочу, чтобы мой комбо заполнил задний конец.

 <dxwgv:ASPxGridView ID="ASPxGridView1" runat="server" 
            AutoGenerateColumns="False" KeyFieldName="CategoryID" 
            oncelleditorinitialize="ASPxGridView1_CellEditorInitialize">
            <Columns>
                <dxwgv:GridViewCommandColumn VisibleIndex="0" Width="80px">
                    <EditButton Visible="True">
                    </EditButton>
                    <NewButton Visible="True">
                    </NewButton>
                    <DeleteButton Visible="True">
                    </DeleteButton>
                </dxwgv:GridViewCommandColumn>
                <dxwgv:GridViewDataTextColumn Caption="CategoryID" FieldName="CategoryID" 
                    VisibleIndex="1">
                </dxwgv:GridViewDataTextColumn>
                <dxwgv:GridViewDataComboBoxColumn Caption="CategoryName" 
                    FieldName="CategoryName" VisibleIndex="2">
                    <PropertiesComboBox TextField="Value" ValueField="key" ValueType="System.Int32">
                        <ClientSideEvents SelectedIndexChanged="function(s, e) { OnBankChanged(s); }" />
                    </PropertiesComboBox>
                </dxwgv:GridViewDataComboBoxColumn>
                <dxwgv:GridViewDataTextColumn Caption="Description" FieldName="Description" 
                    VisibleIndex="3">
                </dxwgv:GridViewDataTextColumn>
            </Columns>
        </dxwgv:ASPxGridView>

Для заполнения сетки я использую приведенный ниже синтаксис C #.

  DataClasses1DataContext db = new DataClasses1DataContext();
            var r = from p in db.Categories
                    select p;
            ASPxGridView1.DataSource = r;
            ASPxGridView1.DataBind();

Чтобы заполнить ячейку комбинированного вида сетки, я использую синтаксис Bellow C #

 protected void ASPxGridView1_CellEditorInitialize(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewEditorEventArgs e)
        {
            if (!ASPxGridView1.IsEditing || e.Column.FieldName != "CategoryID") return;
            ASPxComboBox combo = e.Editor as ASPxComboBox;

            if (!(e.KeyValue == DBNull.Value || e.KeyValue == null)) //return;
            {
                object val = ASPxGridView1.GetRowValuesByKeyValue(e.KeyValue, "CategoryID");
                if (val == DBNull.Value) return;
                Int32 CategoryID = (Int32)val;
                FillCityCombo(combo, CategoryID);
            }

            combo.Callback += new CallbackEventHandlerBase(cmbBranch_OnCallback);

        }

        private void cmbBranch_OnCallback(object source, CallbackEventArgsBase e)
        {
            FillCityCombo(source as ASPxComboBox, Convert.ToInt16(e.Parameter));
        }

        protected void FillCityCombo(ASPxComboBox cmb, Int32 CategoryID)
        {
            //cmb.Items.Clear();
            //cmb.DataSourceID = "";
            DataClasses1DataContext db = new DataClasses1DataContext();
            var r = from p in db.Categories
                    select new { p.CategoryID,p.CategoryName};
            cmb.DataSource = r;
            cmb.DataBind();
        }

Когда я запускаю код AspxGridview, заполните хорошо, но когда я нажимаю на Edit или New Command слевасторона моей сетки показывает мне сообщение об ошибке ниже:

**Object reference not set to an instance of an object.**
  1. В чем проблема?
  2. Как решить эту проблему?
  3. Как связать ячейку со списком наaspx gridview?

Ответы [ 3 ]

2 голосов
/ 21 июля 2010

Это причина этой проблемы.Вы проверяете имя поля «CategoryID».Но столбец ComboBox создается для поля «CategoryName»:

if (!ASPxGridView1.IsEditing || e.Column.FieldName != "CategoryID") return;
ASPxComboBox combo = e.Editor as ASPxComboBox;
1 голос
/ 22 июля 2010

Мы опубликовали пример проекта, показывающего, как реализовать зависимые комбинации в режиме вставки, по адресу:

http://www.devexpress.com/Support/Center/ViewIssue.aspx?issueid=Q102130

Надеюсь, этот проект будет вам полезен.

0 голосов
/ 21 июля 2010

Привязка в событии OnRowDataBound (или эквивалент AspxGridview)

...