"必须声明标量变量"使用时的GridView [英] "must declare scalar variable" when using 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 =btnNeueGruppe文本=NEUE Gruppe的=服务器的OnClick =btnNeueGruppe_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屋!