在网格视图中选择一行,现在想要使用更新按钮单击更新该记录

时间:2013-08-09 19:19:25

标签: asp.net button gridview textbox

我一直坚持这个并尝试了一些不同的东西来使用更新按钮来更新我从网格视图中选择的记录。我在表Id和Name中有2列。我选择了记录,它填充了一个带有名称的文本框....这很好用。我只需要使用相同的记录,并使用更新按钮单击事件将其拉入文本框后,从同一文本框更新名称。我有两个其他工作正常的按钮,分别是“添加”和“删除”,我将添加该代码,但这里是代码:

这是我在页面加载时或在调用方法时填充网格视图的方式:

private void PopulateCompanyListGrid() //This will populate the grid with the table data on page load
    {
        IList<Company> companies;

        using (var context = new IMSDBContext())
        {
            companies = context.Companies.ToList();
        }

        grdvwCompanyList.DataSource = companies;
        grdvwCompanyList.DataBind();
    }

这是网格视图的设置方式:

<asp:GridView runat="server" ID="grdvwCompanyList" OnSelectedIndexChanged="SelectGridRow" DataKeyNames="Id, Name" AllowSorting="True" AutoGenerateSelectButton="True"></asp:GridView>

这就是我将所选记录放在文本框中的方式:

public void SelectGridRow(object sender, EventArgs e) //This will populate the textbo with the row selected from the gridview
    {
        GridViewRow name = grdvwCompanyList.SelectedRow;

        if (name != null)
        {
            var dataKey = grdvwCompanyList.DataKeys[name.RowIndex];
            if (dataKey != null)
                txtCompanyName.Text = (string)dataKey["Name"];


        }
    }

这是我添加记录的方式:

protected void btnAdd_Click(object sender, EventArgs e) // This method adds a record to the database
    {
        if (btnAdd.Text == "Add") // Clears the textbox and notification label and calls method to change name of button if the button says "Add"
        {
            txtCompanyName.Text = "";
            lblCompanyNameNotification.Text = "";
            ButtonChangeAddToSave();
        }
        else if (btnAdd.Text == "Save") // Checks if the button says "Save" and compares textbox and database for a matching record 
        {
            IMSDBContext context = new IMSDBContext();
            Company CompanyCheck = context.Companies.SingleOrDefault(Company => Company.Name == txtCompanyName.Text);

            if (CompanyCheck != null) // Displays a notification if there is already a matching record
            {
                lblCompanyNameNotification.Text = "There is already a Company with that name.";
            }
            else if(txtCompanyName.Text == null)
            { 
                lblCompanyNameNotification.Text = "Please enter a name of a company";
            }
            else if (txtCompanyName.Text != null) // Write the record to the database if no matching record in the database
            {
                Company n = new Company();
                n.Name = txtCompanyName.Text.ToString();


                context.Companies.Add(n);
                context.SaveChanges();

                txtCompanyName.Text = "";
                lblCompanyNameNotification.Text = "";

                ButtonChangeSaveToAdd();
            }
        }
        PopulateCompanyListGrid(); // Calls method to repopulate the gridview
    }

1 个答案:

答案 0 :(得分:1)

在标记中添加隐藏字段以保存公司标识:

<asp:HiddenField ID="hdnCompanyId" runat="server" ></asp:HiddenField>

在selectGridRow方法中,使用公司ID:

填充隐藏字段
public void SelectGridRow(object sender, EventArgs e) //This will populate the textbo with the row selected from the gridview
{
    GridViewRow name = grdvwCompanyList.SelectedRow;

    if (name != null)
    {
        var dataKeys = grdvwCompanyList.DataKeys[name.RowIndex];
        if (dataKeys["Name"] != null)
            txtCompanyName.Text = (string)dataKeys["Name"];
        if (dataKeys["Id"] != null)
            hdnCompanyId.Value = dataKeys["Id"].ToString();
    }
}

在btnUpdate_Click方法中按ID获取公司并更新它:

protected void btnUpdate_Click(object sender, EventArgs e) 
{
    int companyId;
    string companyName = txtCompanyName.Text;
    if(int.TryParse(hdnCompanyId.Value, out companyId)){

        IMSDBContext context = new IMSDBContext();
        Company company = context.Companies.SingleOrDefault(Company => Company.Id == companyId);

        if (company != null && txtCompanyName.Text != "")
        {
            company.Name = companyName;
            context.SaveChanges();

        }
        else
        {
            lblCompanyNameNotification.Text = "The  Company does not exist.";
        }
    }

    PopulateCompanyListGrid(); // Calls method to repopulate the gridview            
}