如何从ASP.NET的DetailsView控件中获取值?

4

我在页面上有一个DetailsView。我设置了DefaultMode="Edit"。现在我想获取用户将在此单元格中编辑的值。

<asp:DetailsView ID="dvApplicantDetails" runat="server" 
            AutoGenerateRows="false" DataKeyNames="ApplicantID" DefaultMode="Edit" 
            onitemcommand="dvApplicantDetails_ItemCommand" >
        <Fields>
            <asp:BoundField DataField="ApplicantID" HeaderText="ApplicantID" ReadOnly="true"/>
            <asp:BoundField DataField="FirstName" HeaderText="First Name" />
            <asp:BoundField DataField="LastName" HeaderText="Last Name" />

            <asp:CommandField ButtonType="Button" ShowEditButton="true" EditText="Update" ShowCancelButton="false" />
        </Fields>
        </asp:DetailsView>

我尝试了许多方法来获取这个值,比如:

protected void dvApplicantDetails_ItemCommand(object sender, DetailsViewCommandEventArgs e)
{
    if (e.CommandName == "Update")
    {
        string firstName = dvApplicantDetails.Rows[1].Cells[1].Text;
        string lastName = dvApplicantDetails.Rows[2].Cells[1].Text;
    }
}

但是它不起作用... 如何使用这种模式获取此值。我知道可以使用<ItemTemplate>而不是<BoundField>,但无论如何都应该有一种方法可以从此字段获取此值。 请帮帮忙! 谢谢!

3个回答

7

很抱歉,尝试访问..Cells[1]Text并不是您想要的。您需要该单元格内TextBox控件的值:

protected void dvApplicantDetails_ItemCommand(object sender, DetailsViewCommandEventArgs e)
{
    if (e.CommandName == "Update")
    {
        string firstName = ((TextBox)dvApplicantDetails.Rows[1].Cells[1].Controls[0]).Text;
        string lastName = ((TextBox)dvApplicantDetails.Rows[2].Cells[1].Controls[0]).Text
    }
}

非常感谢!这正是我所需要的!工作得很好! - Bryuk
非常感谢你,你救了我!不确定微软为什么要把这个做得这么困难,明明已经提供了编辑和插入模式。它本可以更简单的。 - Milind Thakkar

1

Bryuk,

尝试使用OnItemUpdating事件。您可以按以下方式获取新值:

protected void dvApplicantDetails_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
    var dv = sender as DetailsView;

    var firstName = e.NewValues[1].ToString();
    var lastName = e.NewValues[2].ToString();
}

在aspx页面的DetailsView控件中添加Add OnItemUpdating="dvApplicantDetails_ItemUpdating"属性。

0
今天早些时候我需要做这件事......感谢帮助我的问题和答案。以下是我想出的一个函数。
protected void Page_Load(object sender, EventArgs e)
{
    string sFirstName = GetDVRowValue(dvApplicantDetails, "ApplicantID")
}

public string GetDVRowValue(DetailsView dv, string sField)
{
    string sRetVal = string.Empty;
    foreach (DetailsViewRow dvr in dv.Rows)
    {
       if (dvr.Cells[0].Text == sField)
           sRetVal = dvr.Cells[1].Text;
    }
    return sRetVal;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接