Параметр команды TextBox: имя «X» не существует в текущем контексте - PullRequest
0 голосов
/ 15 ноября 2011

Я получаю это сообщение: имя "PINTextBox" не существует в текущем контексте.

.. когда я использую этот код

      protected void SqlDataSource9_Selecting(object sender,
SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@PIN"].Value = PINTextBox;
}

Код работает, когда я использую значение 3, но я хочу, чтобы значения текстового поля передавались в параметр @PIN, а не просто 3

      protected void SqlDataSource9_Selecting(object sender,
SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@PIN"].Value = 3;
}

Код PINTextbox равен

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1"
DataKeyNames="ID" GroupItemCount="2">
...
<EditItemTemplate>
...
<asp:TextBox ID="PINTextBox" runat="server" Text='<%# Bind("PIN") %>'/>
...
</EditItemTemplate>
...
</asp:ListView>

Это сообщение дает мне, потому что текстовое поле указано в SqlDataSource1, а не в SqlDataSource9?

Если так, могу ли я как-то обойти это, используя два разных источника данных? Или как я могу передать данные в PINTextBox моей команде и в свой оператор select (не указан, потому что он работает, когда в команде указано значение 3)?

Спасибо и дайте мне знать, если вам нужно больше кода.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Вам нужно знать, о какой строке TextBox мы говорим.

//myRow contains the row that was just selected
TextBox txtPin = (TextBox)myRow.FindControl ("PINTextBox");
e.Command.Parameters["@PIN"].Value = txtPin.Text;
0 голосов
/ 15 ноября 2011

Вы можете найти метку / текстовое поле, используя выбранный индекс списка, а затем извлечь текст, как показано ниже. (Не уверен, почему вы хотели бы использовать текстовое поле, но вы можете использовать метку; код текстового поля прокомментирован). Вы можете заменить «PINLabel» ниже фактическим идентификатором для вашего ярлыка в ItemTemplate. Этот код будет вызываться при первой загрузке страницы, поэтому вам, возможно, придется позаботиться о том, чтобы поставить условие для обратной передачи.

    protected void SqlDataSource9_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        //TextBox txtPIN = ListView1.Items[ListView1.SelectedIndex].FindControl("PINTextBox") as TextBox;
        //e.Command.Parameters["@PIN"].Value = txtPIN.Text;
        Label lblPIN = ListView1.Items[ListView1.SelectedIndex].FindControl("PINLabel") as Label;
        e.Command.Parameters["@PIN"].Value = lblPIN.Text;
    }

Необходимо убедиться, что этот элемент управления присутствует в шаблоне SelectedItemTemplate, например:

        <asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" 
            DataKeyNames="ID">
            ......
            <EditItemTemplate>
                <tr>
                 ......
                <td><asp:TextBox ID="PINTextBox" runat="server" Text='<%# Bind("PIN") %>' /></td>
                </tr>
            </EditItemTemplate>
            ......
            <ItemTemplate>
                <tr>
                ......
                    <td><asp:Label ID="PINLabel" runat="server" Text='<%# Eval("PIN") %>' /></td>
                ......
                </tr>
            </ItemTemplate>
            ......
            <SelectedItemTemplate>
                <tr>
                ......
                    <td><asp:Label ID="PINLabel" runat="server" Text='<%# Eval("PIN") %>' /></td>
                ......
                </tr>
            </SelectedItemTemplate>
        </asp:ListView>

Старый ответ (IGNORE):

Используйте ".Text" для PINTextBox! protected void SqlDataSource9_Selecting (отправитель объекта, SqlDataSourceCommandEventArgs e) { e.Command.Parameters ["@ PIN"]. Value = PINTextBox.Text; }

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