Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Update в DetailsView


Автор: Choose_Life 25.1.2007, 12:47
есть следующая DetailsView:

Код

    <asp:DetailsView runat="server" ID="UserForm" 
        OnModeChanging="UserForm_ModeChanging" 
        OnItemUpdating="UserForm_ItemUpdating"
        DataKeyNames="Id">
        
        <Fields>        
            <asp:BoundField DataField="FullName" HeaderText="Имя"/>
            <asp:BoundField DataField="Login" HeaderText="Логин"/>
            <asp:BoundField DataField="Password" HeaderText="Пароль" />
            <asp:BoundField DataField="EMail" />                        
            <asp:CommandField ShowEditButton="true" ButtonType="Button"/>
        </Fields>        
    </asp:DetailsView>


и CodeBehind к ней:

Код

public partial class UserDetails : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            UserForm.DataSource = GetUserData();
            UserForm.DataBind();
        }
    }

    protected void UserForm_ModeChanging(object sender, DetailsViewModeEventArgs e)
    {
        UserForm = sender as DetailsView;
        UserForm.ChangeMode(e.NewMode);
        
        UserForm.DataSource = GetUserData();
        UserForm.DataBind();
    }

    protected void UserForm_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
    {
        User user = new User();
        user.Id = (int) e.NewValues["id"];
        user.Login = (string) e.NewValues["Login"];
        user.Password = (string)e.NewValues["Password"];
        
        /*saving user code.... */       

        UserForm.ChangeMode(DetailsViewMode.ReadOnly);

        UserForm.DataSource = GetUserData();
        UserForm.DataBind();

    }

    protected IList<User> GetUserData()
    { 
         .... 
    }

}



Ошибка возникает при попытке выполнения Update в методе UserForm_ItemUpdating во время обращения к полям e.NewValues. В них не содержится никаких значений. OldValues тоже пустые. Подскажите плиз, почему это происходит...

Автор: Choose_Life 25.1.2007, 13:12
Если обновление данных проводить через ObjectDataSource, то такой проблемы не возникает. Почему же она появляется, если мне требуется использовать свой код работы с данными?

Автор: Choose_Life 25.1.2007, 14:17
Собственно смысл проблемы стал понятен: DetailsView как и все контролы, позволяющие выполнять модификацию данных, заполняют значениями NewValues и OldValues только в том случае, если они привязаны к конкретному источнику данных. 

Если же привязка к данным происходит в коде, то этот прием уже не работает, так что для получения значений поля данных придется обращаться к DetailsView по номеру столбца и ячейки, в котором оно находится на форме

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)