При выборе флажка обновите базу данных, используя поля списка - PullRequest
0 голосов
/ 06 марта 2020

Я использую список для отображения различных столбцов / строк из базы данных. Один из этих столбцов является идентификатором и скрыт для пользователя. Еще один столбец - это флажок, который пользователь может щелкнуть, чтобы «выбрать задачу».

<asp:ListView ID="listViewDataSource" ConvertEmptyStringToNull="true"  ItemPlaceholderID="itemPlaceholder" runat="server" DataKeyNames="id,intFrmID" SelectedIndex="0">

Затем в ItemTemplate:

<tr runat="server">
<td class="hidden">
   <asp:Label ID="id" runat="server" Text='<%#Eval("id") %>' /> 
</td>
<td>
  <asp:CheckBox ID="check" runat="server" OnCheckedChanged="check1_CheckedChanged" AutoPostBack="True" Checked='<%# (bool)Eval("bitIsPickedUp") %>' />
  <asp:Label ID="CheckLabel" runat="server" Text='<%#Eval("bitIsPickedUp") %>' />
</td>

Когда кто-то нажимает на этот флажок, я хочу создать новую запись в БД. Для этого мне нужно получить скрытое поле «id» и передать его в мою функцию, которая добавляет запись.

    protected void check1_CheckedChanged(object sender, EventArgs e)
    {
        //in here, I want to get the id, which I should be able to use listViewDataSource.SelectedDataKey but the datakey has one value and it's not correct, makes me think it's being cached somehow?
        var datakey = listViewDataSource.SelectedDataKey;
        CheckBox chk = (CheckBox)item.FindControl("bitIsPickedUp");


    }

Я не очень знаком с веб-формами и использованием ListView, поэтому помощь приветствуется.

1 Ответ

0 голосов
/ 06 марта 2020

Помимо того факта, что вы можете потерять свой SelectedItem в PostBacks, у вас есть несколько проблем с вашим кодом. Так что я просто добавлю сюда несколько вещей ...

protected void check1_CheckedChanged(object sender, EventArgs e) {
    //this is null...
    ListViewItem item = (ListViewItem)listViewDataSource.SelectedValue;

    if (item == null) {
        if (listViewDataSource.Items.Count > 0) {
            item = (ListViewItem)listViewDataSource.Items[0];
        }
    }

    if (item != null) {
        //this returns a checkbox = true value and upon expanding has lots of data that's not super helpful, except maybe the clientID which has the row number
        CheckBox myCheckBox = (CheckBox)sender;

        // add NULL CHECK

        //FindControl doesn't seem to find anything, gets null
        CheckBox chk = (CheckBox)item.FindControl("bitIsPickedUp");

        // add NULL CHECK

        if (chk.Checked) {
            string intId = ((Label)item.FindControl("id")).Text;
            bool success = Int32.TryParse(intId, out int id);
            if (success) {
                GoQuote.InsertIntoGoList(id, 16073);
            }
        }
    } else {
        // log error -- execute additonal logic
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...