2009-10-01 9 views
4

Lorsque les utilisateurs accèdent à une page spécifiée, j'ai un DetailsView attaché à un SqlDataSource et déjà configuré en mode Insertion. Je l'utilise essentiellement comme une page d'inscription pour certains événements. Plutôt que d'avoir les utilisateurs tapent dans leur "UserName", je veux que ce champ remplisse automatiquement basé sur cet utilisateur déjà connecté.Valeurs par défaut sur DetailsView Insert

Est-ce que n'importe qui a des suggestions sur comment avoir l'User.Identity.Name soit le valeur par défaut qui apparaît sur Page_load ou comment coder un remplacement sur DetailsViewInsertEventArgs? Bien sûr, si je suis complètement hors-base, alors d'autres suggestions seraient excellentes. J'utilise le code C# derrière.

Merci, Mike

+0

Une partie du code nous aiderait à comprendre votre question un peu mieux. – Phaedrus

Répondre

3

Vous pouvez faire ceci:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      DetailsView1.DefaultMode = DetailsViewMode.Insert; 
      if (DetailsView1.FindControl("TextBox1") != null) 
      { 
       TextBox txt1 = (TextBox)DetailsView1.FindControl("TextBox1"); 
       txt1.Text = User.Identity.Name.ToString(); 
      } 
     } 
    } 
0

Ah, Merci Ricardo. C'est logique, mais j'ai toujours du mal à le faire fonctionner. Je suppose que j'ai oublié de mentionner que le contrôle est dans un champ lié, si cela fait une différence.

Voici le code MainPage:

<div align="center"> 
    <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
     DataKeyNames="RegistrationID" DataSourceID="SqlDataSourceFBReg" 
     DefaultMode="Insert" Height="50px" 
     Width="55%" OnItemInserted="NFLElim" > 
     <Fields> 
      <asp:BoundField DataField="RegistrationID" HeaderText="RegistrationID" 
       InsertVisible="False" ReadOnly="True" SortExpression="RegistrationID" /> 
      <asp:BoundField DataField="UserName" HeaderText="One Season User Name" 
       SortExpression="UserName" /> 
      <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />... 

Et voici comment je le code derrière l'installation:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class NFLElim_Reg : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      DetailsView1.DefaultMode = DetailsViewMode.Insert; 
      if (DetailsView1.FindControl("UserName") != null) 
      { 
       TextBox txt1 = (TextBox)DetailsView1.FindControl("UserName"); 
       txt1.Text = User.Identity.Name.ToString(); 
      } 
     } 

    } 
    protected void NFLElim(object sender, DetailsViewInsertedEventArgs e) 
    { 
     Response.Redirect("Account.aspx"); 
    } 

} 

Espérons que j'inséré le code correctement

+0

Cela devrait le faire, vous avez inséré le code correctement. Cela devrait fonctionner même dans un domaine lié. –

0

TextBox tata = (TextBox) DetailsView1 .Rows [6] .Cells [1] .Controls [0]; tata.Text = User.Identity.Name;

Cela va bloquer le champ. Si vous modifiez votre boundfield à templatefield, ce code peut également fonctionner:

TextBox txt1 = (TextBox) DetailsView1.FindControl ("UserName"); txt1.Text = User.Identity.Name.ToString();

0

Vous ne savez pas si c'est ce que vous voulez faire, mais si vous voulez utiliser Session, c'est une solution très simple. En fait, je faisais juste des recherches moi-même.

Si vous stockez votre nom d'utilisateur dans Session, vous pouvez le tirer directement à partir de là en tant que paramètre dans votre SQLDataSource.

Tout ce que j'ai fait était d'ajouter un SessionParameter à ma liste InsertParameter dans la vue de balisage.

Dans votre cas, je recommanderais d'aller au balisage du contrôle SqlDataSourceFBReg et de rechercher la liste des InsertParameters.

Ensuite, ajoutez un aspic: SessionParameter avec Name = "UserName" et SessionField = "quel que soit le nom de la session est"

Questions connexes