Флажок просмотра списка С#

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

Любая помощь, пожалуйста.

Мне удалось вызвать функцию события itemcheck, но она учитывает элементы, проверенные изначально, а также элементы, проверенные пользователем. Мне удалось разделить элементы, проверенные изначально, с помощью логической функции «Item_checked by user».

 ` private static bool checked_by_user;
    private void courseworks_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if (checked_by_user == true)
        { //do something
        }
        else ;//do nothing

    }`

Теперь я хочу иметь возможность использовать bar_ref_id только для только что проверенной строки. Мое представление списка создается из базы данных, как показано ниже.

foreach (var item2 in CW_query2)//for each CW
            {
                if (item.Status == true)
                {
                    ListViewItem items = new ListViewItem(new[] {//adds items into list view, per column
                    item2.Module_Code, item2.Title, item2.Due_Date.ToString("dd/MM/yy"),"Submitted",item.Bar_Ref_ID
                });
                    courseworks.Items.Add(items);
                }
                else
                {
                    ListViewItem items = new ListViewItem(new[] {//adds items into list view, per column
                    item2.Module_Code, item2.Title, item2.Due_Date.ToString("dd/MM/yy"),"Not-Submitted",item.Bar_Ref_ID
                });
                    courseworks.Items.Add(items);

                }

Я надеюсь, что моя добавленная информация поможет. заранее спасибо


person Gafar    schedule 23.03.2014    source источник
comment
пожалуйста, опубликуйте свой код.   -  person Christos    schedule 23.03.2014
comment
@ChristosPaisios Я отредактировал свой пост   -  person Gafar    schedule 24.03.2014


Ответы (1)


Если вы уже получаете подписки из базы данных и устанавливаете свойство Checked для каждого элемента в соответствии с подпиской пользователя, не будет ли проще всего использовать событие CheckedChanged флажков? Трудно сказать, какой может быть ваша реализация, но у вас должна быть одна функция, когда флажок снят (удаление подписки), и другая функция, когда флажок установлен (добавление подписки).

Если вы можете предоставить некоторый код, я мог бы быть более конкретным.

Более конкретно

В вашем событии ItemChecked .NET предоставляет object sender и ItemCheckEventArgs e в качестве параметров события. Внутри этой функции вы можете посмотреть sender, чтобы получить ListViewItem, который был проверен/не отмечен, и вы можете посмотреть e, чтобы получить индекс этого элемента в ListView (на случай, если вы можете использовать индекс для легкого изменения данных в свою базу данных). Вот краткий пример, который я собираюсь почти украсть прямо от Microsoft:

private void ListView1_ItemCheck1(object sender, ItemCheckEventArgs e)
{
    ListViewItem item = (ListViewItem)sender

    if (e.CurrentValue==CheckState.Unchecked)
    {
        Unsubscribe(e.Index, currentUserID);
          /*You can pass the Index of the ListViewItem that caused the event
          to a method that will update your database (I would find it easier
          to program a function that takes the current user's ID as a parameter)*/

        Unsubscribe(item.Name, currentUserID);
          /*OR this might be a better way for you to reference what subscription
          should be cancelled (again, in addition to a UserID)*/
    }
    else if((e.CurrentValue==CheckState.Checked))
    {
        Subscribe(e.Index, currentUserID);
    }
}

private void Unsubscribe(int index, int userID)
{
    //unsubscribe the referenced userID from the subscription at index
}

private void Unsubscribe(string subscriptionName, int userID)
{
    //unsubscribe the referenced userID from the subscription called subscriptionName
}

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

person Oran D. Lord    schedule 23.03.2014
comment
Спасибо, я не реализовал это из-за другой проблемы. но я добавлю часть своего кода - person Gafar; 24.03.2014
comment
@Gafar Я обновил свой ответ примером кода, показывающим, как вы можете использовать ItemCheckEventArgs в событии ItemChecked, чтобы узнать, какой ListViewItem был проверен/не отмечен, а также, возможно, что вы можете сделать с этой информацией. - person Oran D. Lord; 01.04.2014
comment
большое спасибо за это, хотя я только вижу это. - person Gafar; 01.04.2014