2012-05-16 60 views
0

我有一個帳戶頁面,用戶可以查看他們的帳戶信息..我希望他們能夠在這裏更改他們的密碼。路上,我已經成功地實現它的情況如下:SelectedIndex自動選擇頁面加載

Web服務:

[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); 
} 
} 

的問題這是我必須在更改密碼之前選擇gridview中的行。有沒有什麼辦法可以自動選擇行,因爲只會有一行。或者,如何在不選擇行的情況下以不同的方式對其進行編碼?

謝謝。

回答

0

您的GridView和按鈕是頁面上的單獨控件,因此您無法確定選擇哪個用戶進行密碼更改,而無需選擇GridView中的行。 IMO更好,如果你可以把按鈕放在GridView中。製作editable GridView

編輯:根據你的評論,你將只有一行在你的網格視圖中,我真的沒有看到與數據表使用Gridview的原因。您可以使用標籤顯示用戶名和文本框以獲取新密碼。 (您可能想要再次確認密碼)。然後,在您的web服務中,不是傳遞數據表,而是傳遞新密碼(如果它的加密密碼更好),然後使用SQL Update語句更新數據。但是,如果您仍然想使用GridView,那麼您可以直接在Row索引中傳遞0,而不是獲取selectedIndex。你可以檢查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); 
} 
+0

在網格中只有一個用戶沒有辦法在沒有網格視圖的情況下獲取數據嗎?這樣,我可以在文本框中輸入密碼,然後使用更改密碼的按鈕來更新數據庫。對不起,我對C#和ASP.NET有了新的認識。 – user1389384

+0

@ user1389384,在這種情況下,您不需要網格,但是如果您仍想使用它,則不必選擇網格行,只需在行索引中傳遞0即可。 ds.Tables [「Users」]。Rows [0] [「password」] = ChangePasswordInput.Text; – Habib

+0

@ user1389384,查看我更新的答案 – Habib