0

ユーザーが自分のアカウント情報を表示できるアカウントページがあります。ここでパスワードを変更できるようにしたいと思います。私がそれを実装することに成功した方法は次のとおりです。

ウェブサービス:

[WebMethod]
    public string ChangePassword(DataSet ds)
    {
        string database = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|/dvd_forum.accdb;Persist Security Info=True";
        OleDbConnection myConn = new OleDbConnection(database);
        OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from Users", myConn);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(myDataAdapter);
        builder.QuotePrefix = "[";
        builder.QuoteSuffix = "]";
        myConn.Open();
        myDataAdapter.Update(ds, "Users");
        myConn.Close();
        return "Password changed!";
    }

フロントコード:

<asp:Label ID="username" runat="server" Text=""></asp:Label><span>'s Account</span><br />
<asp:TextBox ID="ChangePasswordInput" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Save" 
    onclick="ChangePassword_Click" />
<asp:Label ID="Label2" runat="server" Text=""></asp:Label><asp:RequiredFieldValidator id="RequiredFieldValidator3" runat="server" ErrorMessage="Required!" ControlToValidate="ChangePasswordInput"></asp:RequiredFieldValidator>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>

バックコード:

public partial class Account : System.Web.UI.Page
{

public static DataSet ds;

protected void Page_Load(object sender, EventArgs e)
{
    if (User.Identity.IsAuthenticated)
    {
        username.Text = User.Identity.Name;
    }

    localhost.Service1 myws = new localhost.Service1();
    ds = myws.GetUserAcc(User.Identity.Name);
    GridView1.DataSource = ds;
    GridView1.DataBind();
}
protected void ChangePassword_Click(object sender, EventArgs e)
{
    //change password
    int i = GridView1.SelectedIndex;
    ds.Tables["Users"].Rows[i]["password"] = ChangePasswordInput.Text;
    GridView1.DataSource = ds;
    GridView1.DataBind();
    localhost.Service1 myws = new localhost.Service1();
    Label2.Text = myws.ChangePassword(ds);
}
}

これに伴う問題は、パスワードを変更する前にグリッドビューで行を選択する必要があることです。行が1つしかないため、行を自動的に選択する方法はありますか。または、最初に行を選択せず​​に動作するように別の方法でコーディングするにはどうすればよいですか。

ありがとう。

4

1 に答える 1

0

GridView とボタンはページ上の個別のコントロールであるため、GridView で行を選択しないと、パスワードの変更のためにどのユーザーが選択されているかを判断できません。GridView 内にボタンを配置できれば、IMO の方が優れています。編集可能な GridViewを作成します。

編集:グリッドビューに1行しかないというコメントに基づいて、データテーブルでGridviewを使用する理由が本当にわかりません。ユーザー名を表示するラベルと、新しいパスワードのテキスト ボックスを表示できます。(パスワードを再確認したい場合があります)。次に、Web サービスで、datatable を渡す代わりに、新しいパスワード (暗号化されている場合はより適切) を渡し、SQL Update ステートメントを使用してデータを更新することができます。ただし、引き続き GridView を使用する場合は、selectedIndex を取得する代わりに、Row インデックスに 0 を直接渡すことができます。dataTable に行が含まれているかどうかを確認できます。

if(ds.Tables.Count > 0 && ds.Tables["Users"] != null && ds.Tables["Users"].Rows.Count > 0)
{
    ds.Tables["Users"].Rows[0]["password"] = ChangePasswordInput.Text;
    GridView1.DataSource = ds;
    GridView1.DataBind();
    localhost.Service1 myws = new localhost.Service1();
    Label2.Text = myws.ChangePassword(ds);
}
于 2012-05-16T16:23:05.543 に答える