Значения по умолчанию при вставке DetailsView - PullRequest
4 голосов
/ 01 октября 2009

Когда пользователи переходят на указанную страницу, у меня есть DetailsView, прикрепленный к SqlDataSource, и я уже настроен в режиме вставки. По сути, я использую его как страницу регистрации для определенных событий. Вместо того, чтобы пользователи вводили свое «Имя пользователя», я хочу, чтобы это поле заполнялось автоматически на основе того пользователя, который уже вошел в систему.

Есть ли у кого-нибудь предложения о том, как использовать значение User.Identity.Name в качестве значения по умолчанию, которое отображается в Page_load, или как кодировать переопределение для DetailsViewInsertEventArgs? Конечно, если я полностью вне базы, то другие предложения будут отличными.

Я использую код C # позади.

Спасибо, Mike

Ответы [ 4 ]

3 голосов
/ 03 октября 2009

Вы можете сделать это:

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 голосов
/ 22 июля 2014

Не уверен, что именно так вы хотите это сделать, но если вы хотите использовать Session, это действительно легко исправить. На самом деле, я просто исследовал это сам.

Если вы сохраняете свое имя пользователя в сеансе, вы можете сразу же извлечь его в качестве параметра в свой SQLDataSource.

Все, что я сделал, это добавил SessionParameter в мой список InsertParameter в представлении разметки.

В вашем случае, я бы порекомендовал перейти к разметке для элемента управления SqlDataSourceFBReg и найти список InsertParameters.

Затем добавьте asp: SessionParameter с Name = "UserName" и SessionField = "независимо от имени сеанса"

0 голосов
/ 08 августа 2010

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

Это изменит границы. Если вы измените свое поле ограничения на поле шаблона, этот код также может работать:

TextBox txt1 = (TextBox) DetailsView1.FindControl ("Имя пользователя"); txt1.Text = User.Identity.Name.ToString ();

0 голосов
/ 03 октября 2009

Ах, спасибо, Рикардо. Это имеет смысл, но мне все еще трудно заставить его работать. Наверное, я забыл упомянуть, что элемент управления находится в ограниченном поле, если это имеет значение.

Вот код главной страницы:

<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" />...

А вот как у меня есть код для установки:

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

}

Надеюсь, я правильно ввел код

...