получить значение текстового поля из dataview insertitemtemplate

близкие. В настоящее время я бьюсь головой о стену и ищу облегчения!

У меня есть пользователь, создающий новый элемент в базе данных. Пользователь вводит процедуру устранения неполадок (список задач) и очень краткое описание процедуры (примерно 10 слов). Процедура добавляется в базу данных без проблем. Помимо добавления в базу данных, мой код должен отправить администратору электронное письмо с предупреждением о модерации.

Электронное письмо с предупреждением должно содержать имя человека, который его создал (это не проблема) и резюме. Резюме - это то место, где я зацикливаюсь. Я пытаюсь получить его из dataSource.InsertParameters внутри события «ItemInserted», и он становится нулевым.

Вот соответствующая часть DetailsView:

<asp:DetailsView ID="DvProcedures" runat="server" Height="50px" Width="586px" 
    AutoGenerateRows="False" DataKeyNames="ProcID" DataSourceID="dataDvProcedures" 
    OnItemUpdated="DvProcedures_ItemUpdated" OnItemInserted="DvProcedures_ItemInserted" OnItemInserting="DvProcedures_ItemInserting">
    <Fields>
    <!-- other fields are removed from this example to help keep things tiday -->
        <asp:TemplateField HeaderText="Summary" SortExpression="Summary">
            <InsertItemTemplate>
                <asp:TextBox ID="txtProcedureSummary" runat="server" Text='<%# Bind("Summary") %>' Width="586px" CausesValidation="True"></asp:TextBox>
            </InsertItemTemplate>

    </Fields>
</asp:DetailsView>

Вот соответствующая часть источника данных DetailView:

<asp:SqlDataSource ID="dataDvProcedures" runat="server" ConnectionString="<%$ ConnectionStrings:kbelConnectionString %>" 

    InsertCommand="INSERT INTO [Procedures] 
    ([PolicyID], [CategoryID], [Summary], [Content], [CreatedBy], [CreatedOn]) 
    VALUES (@PolicyID, @CategoryID, @Summary, @Procedure, @CreatedBy, GETDATE())" 

    <!-- the remainder of the dataview is removed, so as not to muddy these waters -->
</asp:SqlDataSource>

А вот код для событий «ItemInserted» и «ItemInserting»:

protected void DvProcedures_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
    // check for database exception and such. then re-bind the gridview
    if (e.Exception != null)
    {
        lblErrorMessage.Text = "A database error has occurred. Message: " + e.Exception.Message;
        e.ExceptionHandled = true;
    }
    else if (e.AffectedRows == 0)
        lblErrorMessage.Text = "No error was detected, but procedure could not be added to the database.";
    else
    {
        GvProcedures.DataBind();
    }

    // send email to admin
    this.SendEmailMessage(
        AdminEmail, 
        SmtpServer,
        dataDvProcedures.InsertParameters["CreatedBy"].DefaultValue, // works fine, maybe related to manually setting it in DvProcedures_ItemInserting()?
        dataDvProcedures.InsertParameters["Summary"].DefaultValue, // comes up null, although it's good in DB
        "create");
}

protected void DvProcedures_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
    // set "CreatedBy" attribute for dataview's "insert" command
    // TODO: get username programitically
    string userName = "dvader";
    dataDvProcedures.InsertParameters["CreatedBy"].DefaultValue = userName;

}

Я понятия не имею, как поступить, поэтому любые советы будут приветствоваться.

Спасибо.

Примечание. Я искал SO для этой проблемы и нашел две возможности, ни одна из которых мне не помогла:

1) Получение значения из DataView C#

рекомендация: строковое имя = dataView[index]["Name"] as string; результат: получена ошибка "имя 'индекс' не существует в текущем контексте"

2) Как получить значение из столбца в DataView?

Рекомендация: если у вас есть DataView, а не DataTable, то то же самое работает со строкой DataRowView val = (string)view[rowIndex]["GrossPerPop"];

результат: я не знаю, как создать или использовать DataRowView


person user3609652    schedule 06.05.2014    source источник