0

ユーザーがログインして自分のデータを編集できるアプリケーションがあります。ただし、ユーザーが管理者の場合、編集可能なすべてのユーザーのレコードを含むグリッドビューを取得します。ユーザーが管理者でない場合は、自分のデータを編集できるリストビューが表示されます。

ユーザーがページにログインすると、それ自体もデータベースに保存されているユーザーIDが、Session["ID"]のセッション変数として保存されます。次に、リストビューにユーザーのデータを入力する必要があります。Session["ID"]パラメータに基づいてデータをクエリするだけでよいと思いました。しかし、私はこれを行う方法がわかりません。

編集:

わかりました。方法がわからないため、これに関するコードはほとんどありませんが、持っているものを投稿します。最初は、ユーザーIDのセッション変数を設定する方法です。

            objda = new SqlDataAdapter("[GetIDOfUser]", objcon);
            objda.SelectCommand.CommandType = CommandType.StoredProcedure;
            objda.SelectCommand.Parameters.Add("@Username", SqlDbType.VarChar).Value = tbUsername.Text;
            objda.SelectCommand.Parameters.Add("@UserPassword", SqlDbType.VarChar).Value = tbPassword.Text;
            String id = (string)objda.SelectCommand.ExecuteScalar();
            Session["ID"] = id;

これは私のマークアップです:

 <asp:ListView ID="ListView1" Visible="False" runat="server" DataSourceID="SqlDataSource2"></asp:ListView>

これは、リストビューを有効にするコードです。

protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["UserAuthentication"] == null)
            {
                Response.Redirect("Login.aspx");
            }

            if (Session["Benutzerart"].ToString() == Enums.Enumerations.Benutzer.Administrator.ToString())
            {
                GridView1.Visible = true;  

                //Set controls for admin
            }

            if (Session["Benutzerart"].ToString() != Enums.Enumerations.Benutzer.Administrator.ToString())
            {
                ListView1.Visible = true;
                //Set controls for other users
            }
        }

わかりました、私はそれを理解しました:

上記のコードのように、通常のリストビューを作成します。データソースのみがマークアップにselectcommand属性を持っていません。この属性はコード内で設定されます:

if (Session["Benutzerart"].ToString() != Enums.Enumerations.Benutzer.Administrator.ToString())
            {
                ListView1.Visible = true;
                SqlDataSource2.SelectCommand = "SELECT [Titel], [Bezeichnung], [Vorname], [Nachname], [Geburtsdatum], [Geburtsort], [Straße], [Nationalität], [Hausnummer], [PLZ], [Ort], [Land], [Mobil], [UrlaubstageGenommen], [UrlaubstageInsgesamt], [Status], [Benutzerart], [Homepage], [Email], [Festnetz], [Fax], [UrlaubstageRest], [Username], [UserPassword] FROM [Benutzer] WHERE [BenutzerID] = '" + Session["ID"] + "'";
            }

データソースのマークアップ:

<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ></asp:SqlDataSource>
4

2 に答える 2

2

リストビューをSqlDataSourceにバインドしている場合は、sqldatasource SelectParameterを使用してください

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
                                ConnectionString="<%$ ConnectionStrings:yourConnection %>" 
                                SelectCommand="SELECT * FROM yourTable WHERE userid = @userid">
                                <SelectParameters>
                                    <asp:SessionParameter Name="userid" SessionField="ID" Type="String" />
                                </SelectParameters>
                            </asp:SqlDataSource>
于 2013-03-13T15:09:49.920 に答える
1

DB からデータを選択するには、SQL データ ソースを作成して ListView にバインドします。

    SqlDataSource ds = new SqlDataSource();

    ds.ConnectionString = yourDBconnectionString;

    ds.SelectCommand = "SELECT * FROM records_table WHERE user_id=@user_id";
    ds.SelectParameters.Add("user_id", Convert.ToInt32(Session["id"]));

    ListView1.DataSource = ds;
    ListView1.DataBind();

次に、レコード フィールドを aspx ページの使用で ListView にバインドします (ほんの一例)。

<%# Eval("recort_title") %>
于 2013-03-13T14:56:46.143 に答える