не могу выбрать строку в gridview c# - PullRequest
0 голосов
/ 01 августа 2020

В моем GridView есть флажок (редактируемый)

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

Моя проблема в том, что я не могу выбрать строку в сетке

Вот мой скрипт gridview

                        <asp:GridView ID="grdTags" runat="server" AutoGenerateColumns="false" OnSelectedIndexChanged="grdTags_SelectedIndexChanged"
                            AllowPaging="false" AllowSorting="True" OnSelectedIndexChanging="grdTags_SelectedIndexChanging"
                            DataKeyNames="ID"
                            DataSourceID="dsTagsDetailsSelect" OnRowDataBound="grdTags_RowDataBound">
                            <Columns>
                                <asp:CommandField HeaderText="" SelectText="Select" ShowSelectButton="True" ControlStyle-Font-Size="Small">
                                    <HeaderStyle BackColor="Gainsboro" />
                                </asp:CommandField>

                                <asp:TemplateField HeaderText="Add">
                                    <HeaderStyle BackColor="Gainsboro" />
                                    <ItemTemplate>
                                        <asp:CheckBox runat="server" ID="cbxAdd"
                                            Checked='<%# Eval("Added")  %>' AutoPostBack="true"
                                            OnCheckedChanged="cbxAdd_CheckedChanged" />
                                    </ItemTemplate>
                                </asp:TemplateField>

, а это мой код за

   protected void cbxAdd_CheckedChanged(object sender, EventArgs e)
    {
        try
        { 
        CheckBox cbxAdd;
        GridViewRow selectedRow;

        Int32 RepID = Convert.ToInt32(hfRepID.Value.ToString());
        // Cast the sender object to a CheckBox
        cbxAdd = (CheckBox)sender;

        // We can find the row we clicked the checkbox in by walking up the control tree
        selectedRow = (GridViewRow)cbxAdd.Parent.Parent;

        // GridViewRow has a DataItemIndex property which we can use to look up the DataKeys array
        Int32 ID = (int)grdTags.DataKeys[selectedRow.DataItemIndex].Value;

        Int32 Checked = (cbxAdd.Checked) ? 1 : 0;

        SqlConnection conn = OpenConnection();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandTimeout = 300;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "TagInsertDelete";
        //cmd.Parameters.Add(new SqlParameter("@RepID", RepID));
        cmd.Parameters.Add(new SqlParameter("@ID", ID));
        cmd.Parameters.Add(new SqlParameter("@Add", Checked));

        cmd.ExecuteScalar();
        }
        catch(Exception ex)
        {
            throw ex;
        }

    }

Достигнув этой строки, я получаю ошибку

        Int32 ID = (int)grdTags.DataKeys[selectedRow.DataItemIndex].Value;

ОШИБКА:

Невозможно получить значение локальной переменной или аргумента, потому что оно недоступно в этом указателе инструкции, возможно, потому, что оно было оптимизировано.

...