2

asp.netのWebフォームに2つのグリッドビューがあり、C#コードが背後にあります。また、user、group、usergroupの3つのテーブルがあります。

1つのグリッドビューには、説明とボタンフィールドの2つの列を持つグループのリストが含まれています。ユーザーがこのボタンフィールドをクリックすると、選択したグループのメンバーが2番目のグリッドビューに表示されます。

ただし、「ボタンフィールドをクリックするたびにスカラー変数@GruppenIDを宣言する必要があります。ここで何が欠けていますか?申し訳ありませんが、aspとsqlはまったく新しいです...」というエラーが表示されます。

働く:

<%@ 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)
        {

        }
    }
}
4

2 に答える 2

2

SqlDataSourceSelectParameterを渡す必要があります。

あなたは新しいので、プロセス全体はあなたの必要に応じてこのようになるはずです

ボタンフィールドにCommandArgumentプロパティを追加します

  // <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>

SqlDataSource2は

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

行コマンドになりました

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

        }
于 2013-03-20T15:16:00.790 に答える
1

次のように、とのSqlDataSource1両方でSQLパラメータ@GruppenIDを宣言する必要があります。SelectCommandDeleteCommand

<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">

    <SelectParameters>
        <asp:Parameter Name="GruppenID" />
    </SelectParameters>

    <DeleteParameters>
        <asp:Parameter Name="GruppenID" />
    </DeleteParameters>

</asp:SqlDataSource>

次に、このスレッドのように、このパラメータの値を設定できます。

于 2013-03-20T15:11:26.913 に答える