"必须声明标量变量"使用时的GridView [英] "must declare scalar variable" when using gridview

查看:142
本文介绍了"必须声明标量变量"使用时的GridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在asp.net一个WebForm用C#code落后2 GridView的。我也有3个表:用户,组和用户组

一个GridView控件包含组具有两列的列表:描述和ButtonField字段。当用户点击这个ButtonField字段,所选择的组的​​成员,应显示在第二gridview的

然而

,我得到一个错误必须声明标量变量@GruppenID我每次点击ButtonField字段。我失去了什么吗?很抱歉,但我完全新的ASP和SQL ...

工作

 <%@页面语言=C#的MasterPageFile =〜/的Site.MasterAutoEventWireup =真codeBehind =Gruppenverwaltung.aspx.cs继承= WerIstWo.Gruppenverwaltung%GT;< ASP:内容ID =内容1ContentPlaceHolderID =ContentPlaceHolder1=服务器>
    < H1> Gruppenverwaltung< / H1>
    < ASP:面板ID =pnlGruppe滚动条=两者=服务器>
        < ASP:按钮的ID =btnN​​eueGruppe文本=NEUE Gruppe的=服务器的OnClick =btnN​​eueGruppe_Click/>
        < ASP:GridView控件的DataKeyNames =GruppenIDOnRowCommand =grdGruppe_RowCommandID =grdGruppe=服务器的AutoGenerateColumns =FALSE的DataSourceID =SqlDataSource1>
            <柱体和GT;
                < ASP:BoundField的数据字段=Bezeichnung的HeaderText =BezeichnungSORTEX pression =Bezeichnung/>
                < ASP:的TemplateField的HeaderText =Mitglieder anzeigen>
                    <&ItemTemplate中GT;
                        < ASP:按钮的ID =btnMitgliederAnzeigen=服务器文本=Mitglieder anzeigen的CommandName =MitgliederAnzeigen
                            CommandArgument ='<%#的eval(GruppenID)%>' />
                    < / ItemTemplate中>
                < / ASP:的TemplateField>
                < ASP:CommandField中的HeaderText =Archivieren按钮类型=按钮的ShowDeleteButton =真/>
            < /专栏>
        < / ASP:GridView的>
        < ASP:SqlDataSource的OnSelected =SqlDataSource1_SelectedID =SqlDataSource1=服务器的ConnectionString =<%$的ConnectionStrings:的ConnectionString%>中
            的SelectCommand =SELECT [Bezeichnung],[GruppenID] FROM [Gruppe的],其中​​[Archiviert]!= 1
            DeleteCommand会=UPDATE Gruppe的SET [Archiviert] = 1 WHERE [GruppenID] = @GruppenID>
        < / ASP:SqlDataSource的>
        < ASP:按钮的ID =btnZurueck文本=Zurück=服务器的OnClick =btnZurueck_Click/>
    < / ASP:面板>
    < ASP:面板可见=假ID =pnlMitglieder滚动条=两者=服务器>
        < ASP:GridView控件ID =grdBenutzer=服务器的AutoGenerateColumns =FALSE的DataSourceID =SqlDataSource2>
            <柱体和GT;
                < ASP:BoundField的数据字段=Vorname的HeaderText =VornameSORTEX pression =Vorname/>
                < ASP:BoundField的数据字段=Nachname的HeaderText =NachnameSORTEX pression =Nachname/>
                < ASP:BoundField的数据字段=Geburtsdatum的HeaderText =GeburtsdatumSORTEX pression =Geburtsdatum/>
            < /专栏>
        < / ASP:GridView的>
        < ASP:SqlDataSource的ID =SqlDataSource2=服务器的ConnectionString =<%$的ConnectionStrings:的ConnectionString%>中
            的SelectCommand =SELECT a.Vorname,
                           a.Nachname,
                           a.Geburtsdatum
                           FROM [Benutzer]一
                           INNER JOIN [BenutzerGruppe] b
                           ON a.BenutzerID = b.BenutzerID
                           INNER JOIN [Gruppe的]Ç
                           ON b.GruppenID = c.GruppenID
                           WHERE c.GruppenID = @GruppenID>
            < SelectParameters>
                < ASP:参数名称=GruppenID/>
            < / SelectParameters>
        < / ASP:SqlDataSource的>
        < ASP:按钮的ID =Button1的文本=Zurück=服务器的OnClick =的button1_Click/>
    < / ASP:面板>
< / ASP:内容>


 使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用的System.Web;
使用System.Web.UI程序;
使用System.Web.UI.WebControls;
使用System.Data.SqlClient的;
使用System.Data这;
使用System.Configuration;命名空间WerIstWo
{
    公共部分类Gruppenverwaltung:System.Web.UI.Page
    {
        保护无效的Page_Load(对象发件人,EventArgs的发送)
        {
            如果(会话[UserAuthentication] == NULL)
            {
                的Response.Redirect(的Login.aspx);
            }
        }        保护无效btnZurueck_Click(对象发件人,EventArgs的发送)
        {
            的Response.Redirect(Datenverwaltung.aspx);
        }        保护无效btnNeueGruppe_Click(对象发件人,EventArgs的发送)
        {
            的Response.Redirect(NeueGruppe.aspx);
        }        保护无效grdGruppe_RowCommand(对象发件人,GridViewCommandEventArgs E)
        {
            如果(e.CommandName ==MitgliederAnzeigen)
            {
                串指数= e.CommandArgument.ToString();
                pnlMitglieder.Visible =真;
                pnlGruppe.Visible = FALSE;
                SqlDataSource2.SelectParameters [GruppenID] =默认值指标。
                grdBenutzer.DataBind();
            }
        }        保护无效的button1_Click(对象发件人,EventArgs的发送)
        {
            pnlMitglieder.Visible = FALSE;
            pnlGruppe.Visible =真;
        }        保护无效SqlDataSource1_Selected(对象发件人,SqlDataSourceStatusEventArgs E)
        {        }
    }
}


解决方案

您必须通过SqlDataSource的选择参数。

由于你是一个新的全过程应该是这样的为您的需求。

在按钮字段中添加CommandArgument属性

  //< ASP:ButtonField字段按钮类型=按钮CommandArgument =GruppenID的CommandName =MitgliederAnzeigen文本=Mitglieder anzeigen/>   取代这    < ASP:的TemplateField的HeaderText =Mitglieder anzeigen>
            <&ItemTemplate中GT;
                < ASP:按钮的ID =BTN1=服务器文本=Mitglieder anzeigen的CommandName =MitgliederAnzeigen
                    CommandArgument ='<%#的eval(GruppenID)%>' />
            < / ItemTemplate中>
        < / ASP:的TemplateField>

您SqlDataSource2必须

 < ASP:SqlDataSource的ID =SqlDataSource2=服务器的ConnectionString =<%$的ConnectionStrings:的ConnectionString%>中
        的SelectCommand =选择a.Nachname,
        c.GruppenID
        FROM [Benutzer]一
        INNER JOIN [BenutzerGruppe] b
        ON a.BenutzerID = b.BenutzerID
        INNER JOIN [Gruppe的]Ç
        ON b.GruppenID = c.GruppenID
        WHERE c.GruppenID = @GruppenID
         >
    < SelectParameters>
    < ASP:参数名称=GruppenID/>
< / SelectParameters>
    < / ASP:SqlDataSource的>

现在在命令行

 如果(e.CommandName ==MitgliederAnzeigen)
        {
 串指数= e.CommandArgument.ToString();
           pnlMitglieder.Visible =真;
           pnlGruppe.Visible = FALSE;
              SqlDataSource2.SelectParameters [GruppenID] =默认值指标。
              grdBenutzer.DataBind();        }

i have two gridviews on a webform in asp.net with c# code behind. i also have 3 tables: user, group and usergroup.

one gridview contains a list of groups with two columns: description and a buttonfield. when the user clicks on this buttonfield, the members of the selected group should be displayed in the second gridview.

however, i get an error "must declare scalar variable @GruppenID every time i click the buttonfield. what am i missing here? sorry but i am completely new to asp and sql...

WORKING:

<%@ Page Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Gruppenverwaltung.aspx.cs" Inherits="WerIstWo.Gruppenverwaltung" %>

<asp:Content ID="content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <h1>Gruppenverwaltung</h1>
    <asp:Panel ID="pnlGruppe" ScrollBars="Both" runat="server">
        <asp:Button ID="btnNeueGruppe" Text="Neue Gruppe" runat="server" OnClick="btnNeueGruppe_Click" />
        <asp:GridView DataKeyNames="GruppenID" OnRowCommand="grdGruppe_RowCommand" ID="grdGruppe" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:BoundField DataField="Bezeichnung" HeaderText="Bezeichnung" SortExpression="Bezeichnung" />
                <asp:TemplateField HeaderText="Mitglieder anzeigen">
                    <ItemTemplate>
                        <asp:Button ID="btnMitgliederAnzeigen" runat="server" Text="Mitglieder anzeigen" CommandName="MitgliederAnzeigen"
                            CommandArgument='<%# Eval("GruppenID") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField HeaderText="Archivieren" ButtonType="Button" ShowDeleteButton="true" />
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource OnSelected="SqlDataSource1_Selected" ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            SelectCommand="SELECT [Bezeichnung], [GruppenID] FROM [Gruppe] WHERE [Archiviert] != 1"
            DeleteCommand="UPDATE Gruppe SET [Archiviert] = 1 WHERE [GruppenID] = @GruppenID">            
        </asp:SqlDataSource>
        <asp:Button ID="btnZurueck" Text="Zurück" runat="server" OnClick="btnZurueck_Click" />
    </asp:Panel>
    <asp:Panel Visible="false" ID="pnlMitglieder" ScrollBars="Both" runat="server">
        <asp:GridView ID="grdBenutzer" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource2">
            <Columns>
                <asp:BoundField DataField="Vorname" HeaderText="Vorname" SortExpression="Vorname" />
                <asp:BoundField DataField="Nachname" HeaderText="Nachname" SortExpression="Nachname" />
                <asp:BoundField DataField="Geburtsdatum" HeaderText="Geburtsdatum" SortExpression="Geburtsdatum" />
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            SelectCommand="SELECT  a.Vorname,
                           a.Nachname,
                           a.Geburtsdatum
                           FROM [Benutzer] a
                           INNER JOIN [BenutzerGruppe] b
                           ON a.BenutzerID = b.BenutzerID
                           INNER JOIN [Gruppe] c
                           ON b.GruppenID = c.GruppenID
                           WHERE c.GruppenID = @GruppenID">
            <SelectParameters>
                <asp:Parameter Name="GruppenID" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:Button ID="Button1" Text="Zurück" runat="server" OnClick="Button1_Click" />
    </asp:Panel>
</asp:Content>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace WerIstWo
{
    public partial class Gruppenverwaltung : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["UserAuthentication"] == null)
            {
                Response.Redirect("Login.aspx");
            }
        }

        protected void btnZurueck_Click(object sender, EventArgs e)
        {
            Response.Redirect("Datenverwaltung.aspx");
        }

        protected void btnNeueGruppe_Click(object sender, EventArgs e)
        {
            Response.Redirect("NeueGruppe.aspx");
        }

        protected void grdGruppe_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "MitgliederAnzeigen")
            {
                string index = e.CommandArgument.ToString();
                pnlMitglieder.Visible = true;
                pnlGruppe.Visible = false;
                SqlDataSource2.SelectParameters["GruppenID"].DefaultValue = index;
                grdBenutzer.DataBind();             
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            pnlMitglieder.Visible = false;
            pnlGruppe.Visible = true;            
        }

        protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
        {

        }
    }
}

解决方案

You must pass SqlDataSource Select Parameter.

As you are new a whole process should be like this as your need

add CommandArgument property in button Field

  // <asp:ButtonField ButtonType="Button" CommandArgument="GruppenID"   CommandName="MitgliederAnzeigen" Text="Mitglieder anzeigen" /> 

   replace this to

    <asp:TemplateField HeaderText="Mitglieder anzeigen">
            <ItemTemplate>
                <asp:Button ID="btn1" runat="server" Text="Mitglieder anzeigen" CommandName="MitgliederAnzeigen"
                    CommandArgument='<%# Eval("GruppenID") %>' />
            </ItemTemplate>
        </asp:TemplateField>

your SqlDataSource2 must be

    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
        SelectCommand="select a.Nachname,
        c.GruppenID
        FROM [Benutzer] a
        INNER JOIN [BenutzerGruppe] b
        ON a.BenutzerID = b.BenutzerID
        INNER JOIN [Gruppe] c
        ON b.GruppenID = c.GruppenID
        WHERE   c.GruppenID = @GruppenID
         ">    
    <SelectParameters>
    <asp:Parameter Name="GruppenID" />
</SelectParameters>
    </asp:SqlDataSource>

now on row command

if (e.CommandName == "MitgliederAnzeigen")
        {
 string index = e.CommandArgument.ToString();
           pnlMitglieder.Visible = true;
           pnlGruppe.Visible = false;  
              SqlDataSource2.SelectParameters["GruppenID"].DefaultValue = index;
              grdBenutzer.DataBind();

        }

这篇关于&QUOT;必须声明标量变量&QUOT;使用时的GridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆