2012-05-16 2 views
0

사용자가 계정 정보를 볼 수있는 계정 페이지가 있습니다. 여기에서 비밀번호를 변경할 수 있기를 바랍니다. 방법은 나는 다음과 같다 그것을 구현하는 데 성공했다 :SelectedIndex 자동 페이지로드 선택

웹 서비스 :

[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를 datatable과 함께 사용하는 이유를 실제로 볼 수 없습니다. 새 암호에 대한 사용자 이름과 텍스트 상자를 보여주는 레이블을 가질 수 있습니다. 암호를 재확인하고 싶을 수 있습니다. 그런 다음 웹 서비스에서 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); 
} 
+0

그리드보기를 사용하지 않고 데이터를 가져올 방법이없는 그리드 사용자는 오직 한 명입니까? 그렇게하면 텍스트 상자에 암호를 입력 한 다음 암호를 변경하여 데이터베이스를 업데이트 할 수 있습니다. 미안 해요 C# 및 ASP.NET 새로운. – user1389384

+0

@ user1389384,이 경우에는 격자가 필요하지 않지만 격자 행을 선택하는 대신 계속 사용하려면 행 색인에서 0을 전달하십시오. 표 [ "Users"]. 행 [0] [ "password"] = ChangePasswordInput.Text; – Habib

+0

@ user1389384, 내 업데이트 된 답변 확인 – Habib