Как получить выбранный ряд сетки деталей в Master-Detail GridView? - PullRequest
2 голосов
/ 07 июля 2010

У меня проблема с получением значений выбранных строк сетки деталей.У меня есть сетка основных деталей во всплывающем элементе управления, и она отлично работает.Я также включил выбор разрешения, чтобы иметь флажки, но когда я пытаюсь запустить GetSelectedFieldValues ​​для ClientSideEvents кнопки, он всегда возвращает «0».Что я делаю не так, я не могу его найти?

Вот таблица с подробностями:

                            AutoGenerateColumns="False"

CssFilePath = "~ / App_Themes / Aqua / {0} /styles.css "

                            CssPostfix="Aqua" 

                            OnBeforePerformDataSelect="gv_ParameterTempD_BeforePerformDataSelect"

ClientInstanceName =" gvC_ParameterTempD ">

                                <dxwgv:GridViewCommandColumn

ShowSelectCheckbox =" True "VisibleIndex =" 0 ">

                                </dxwgv:GridViewCommandColumn>

                                <dxwgv:GridViewDataTextColumn

Caption = "Detay Kodu" FieldName = "PrmDetailCode"

                                    VisibleIndex="0">

                                </dxwgv:GridViewDataTextColumn>

                                <dxwgv:GridViewDataTextColumn

Caption = "Seçim Adı" FieldName = "PrmDetailName"

                                    VisibleIndex="2">

                                </dxwgv:GridViewDataTextColumn>

                                <dxwgv:GridViewDataTextColumn

Caption = "Seçim Adı (Grup) "

                                    FieldName="PrmDetailNameG"

VisibleIndex =" 3 ">

                                </dxwgv:GridViewDataTextColumn>

                                <dxwgv:GridViewDataTextColumn

Заголовок =" Seçim Adı (Stok) "

                                    FieldName="PrmDetailNameS"

VisibleIndex ="4">

                                </dxwgv:GridViewDataTextColumn>

                                <dxwgv:GridViewDataTextColumn

Заголовок = "Grup Seçimi Yapan"

                                    FieldName="PrmGroupSelector"

VisibleIndex = "5">

                                </dxwgv:GridViewDataTextColumn>

                                <dxwgv:GridViewDataTextColumn

Заголовок = "Stok Seçimi Yapan"

                                    FieldName="PrmStokSelector"

VisibleIndex =" 6 ">

                                </dxwgv:GridViewDataTextColumn>

                            </Columns>

А это кнопка:

                <ClientSideEvents Click="function(s,e)

                {

                    pcc_Question.Hide();

                    gvC_ParameterTempD.GetSelectedFieldValues('PrmDetailName;PrmDetailNameG;PrmDetailNameS',ShowCellValue);

                }"

                />

            </dxe:ASPxButton>

и это jsscript:

функция ShowCellValue (значения) {

    var value = condition.GetText();

    alert(values.length); // here it returns "0"

    if(value != "")

    {

        var newValue = ' ' + value + values + ' = ';

        condition.SetText(newValue);

    }

    else

    {

        for(var i = 0; i < values.length; i ++) {

            value += values[i];

        }

        condition.SetText(value);

    }



}

Я не знаю, что я делаю неправильно,

Спасибо за помощь

Ответы [ 4 ]

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

Я создал пример проекта на основе вашего описания, и он отлично работает. Доступно для скачивания с:

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

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

Я устанавливаю источник данных во время выполнения, но я не вызываю метод DataBind, потому что он заставляет BeforePerformDataSelect Подробной сетки выполнять более одного.

Этот код устанавливает источник данных основных сеток и связывает его:

защищенное пустое пространство gv_Answers_CustomCallback (отправитель объекта, ASPxGridViewCustomCallbackEventArgs e) {

        ConfPrmMTempCollection _ConfPrmMTempCollection = new ConfPrmMTempCollection();
        masterKey = e.Parameters;

        if (masterKey != "")
        {
            man.Add(new SqlOperatorEquality("MAND_CONF_PRM_M_TEMP.PARAMETER_M_TEMP_ID", Convert.ToInt32(masterKey)));
            gv_Answers.DataSource = gc.LoadCollectionFromCollType(typeof(ConfPrmMTempCollection),man);
            gv_Answers.DataBind();

            man.Clear();

        }
    }

А этот код предназначен для установки источника данных сетки сведений:

protected void gv_ParameterTempD_BeforePerformDataSelect (отправитель объекта, EventArgs e) {

        ASPxGridView detailGrid = sender as ASPxGridView;

        masterKey = detailGrid.GetMasterRowKeyValue().ToString();
        man.Add(new SqlOperatorEquality("MAND_CONF_PRM_D_TEMP.PARAMETER_M_TEMP_ID", Convert.ToInt32(masterKey)));

        detailGrid.DataSource = gc.LoadCollectionFromCollType(typeof(ConfPrmDTempCollection),man);
    }
0 голосов
/ 08 июля 2010

Я вижу, что вы установили источник данных главной сетки в обработчике событий CustomCallback.Попробуйте кэшировать значение masterKey в переменной Session и установить источник данных сетки не только в обработчике событий CustomCallback, но и в методе Page_Init:

protected void Page_Init(object sender, EventArgs e) {
    if(Session["masterKey"] == null)
      return;
    ConfPrmMTempCollection _ConfPrmMTempCollection = new ConfPrmMTempCollection();

            masterKey = Session["masterKey"].ToString();

            if (masterKey != "")
            {
                man.Add(new SqlOperatorEquality("MAND_CONF_PRM_M_TEMP.PARAMETER_M_TEMP_ID", Convert.ToInt32(masterKey)));
                gv_Answers.DataSource = gc.LoadCollectionFromCollType(typeof(ConfPrmMTempCollection),man);
                man.Clear();
            }

    }


    protected void Page_Load(object sender, EventArgs e) {
                gv_Answers.DataBind();
    }

Помогает ли это?

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

Правильно ли я понимаю, что кнопка находится в том же контейнере DetailRowTemplate? В любом случае, необходимо получить доступ к правильному экземпляру подробного объекта GridView. Для этого установите для свойства ClientInstanceName сетки динамическое значение. Это должно позволить вам получить доступ к правильному экземпляру сетки и получить выбранные значения строк. Пример кода доступен по адресу:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...