命令参数文本框:名称"X"在当前上下文中不存在

本文关键字:quot 上下文 不存在 名称 文本 命令 参数 | 更新日期: 2023-09-27 18:14:36

我得到这个消息:名称"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;
}

<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中的数据传递给我的命令并进入我的选择语句(未列出,因为当我在命令中具有值3时它似乎可以工作)?

谢谢,如果你需要更多的代码请告诉我。

命令参数文本框:名称"X"在当前上下文中不存在

你需要知道我们谈论的是哪一行的TextBox

//myRow contains the row that was just selected
TextBox txtPin = (TextBox)myRow.FindControl ("PINTextBox");
e.Command.Parameters["@PIN"].Value = txtPin.Text;

您可以使用listview的selecteindex找到标签/文本框,然后提取文本,如下所示。(不确定为什么要使用文本框,但可以使用标签;文本框代码被注释)。您可以将下面的"PINLabel"替换为ItemTemplate中标签的实际ID。该代码将在您第一次加载页面时调用,因此您可能需要注意为回发设置条件。

    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):

使用"。文本"为PINTextBox!sqldatasource9_selection(对象发送者)SqlDataSourceCommandEventArgs e){e.Command.Parameters("@PIN")。Value = PINTextBox.Text;}