#c# #asp.net
#c# #asp.net
Вопрос:
Я пытаюсь создать простое приложение для просмотра сетки, и я нашел пример в Интернете и внес некоторые изменения. У меня есть одна проблема, и меня смущает одна вещь. Проблема в том, что я не могу добавить данные в gridview в режиме редактирования. Я установил точку останова в свойстве Gridview RowCommand и увидел, что все значения текстового поля пусты. Возможно, это глупая ошибка, но я не знаю, где она находится. И есть еще одна вещь, при добавлении данных мы используем этот код:
(e.CommandName.Equals("ADD"))
Я не понял, но в коде нет (e.CommandName.Equals("Update"))
или чего-то подобного. Как в этом случае срабатывает кнопка обновления?.
Заранее благодарю.
Это мой код:
<asp:GridView ID="gvEmployeeDetails" runat="server" Width="600px"
AutoGenerateColumns="false" ShowFooter="true"
onrowcommand="gvEmployeeDetails_RowCommand"
onrowdeleting="gvEmployeeDetails_RowDeleting"
onrowupdating="gvEmployeeDetails_RowUpdating"
onrowcancelingedit="gvEmployeeDetails_RowCancelingEdit"
onrowediting="gvEmployeeDetails_RowEditing"
HeaderStyle-BackColor="#4D4D4D"
HeaderStyle-ForeColor="White">
<Columns>
<asp:TemplateField HeaderText="Employee ID">
<ItemTemplate>
<asp:Label ID="lblEmpID"
runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "empid") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="lblEditEmpID"
runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "empid") %>'>
</asp:Label>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddEmpID" runat="server" Width="100px">
</asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label ID="lblName" runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "name") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEditName" runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "name") %>'>
</asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddName" runat="server" Width="100px">
</asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Designation">
<ItemTemplate>
<asp:Label ID="lblDesignation" runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "designation") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEditDesignation" runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "designation") %>'>
</asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddDesignation" runat="server" Width="150px">
</asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="City">
<ItemTemplate>
<asp:Label ID="lblCity" runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "city") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEditCity" runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "city") %>'>
</asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddCity" runat="server" Width="80px">
</asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Country">
<ItemTemplate>
<asp:Label ID="lblCountry" runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "country") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEditCountry" runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "country") %>'>
</asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddCountry" runat="server" Width="80px">
</asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Action">
<ItemTemplate>
<asp:ImageButton ID="imgbtnEdit" runat="server" CommandName="Edit"
ImageUrl="~/Images/icon-edit.png" Height="32px" Width="32px"/>
<asp:ImageButton ID="imgbtnDelete" runat="server" CommandName="Delete"
ImageUrl="~/Images/Delete.png"/>
</ItemTemplate>
<EditItemTemplate>
<asp:ImageButton ID="imgbtnUpdate" runat="server" CommandName="Update"
ImageUrl="~/Images/icon-update.png"/>
<asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel"
ImageUrl="~/Images/icon-Cancel.png"/>
</EditItemTemplate>
<FooterTemplate>
<asp:LinkButton ID="lbtnAdd" runat="server" CommandName="ADD"
Text="Add" Width="80px">
</asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
И это файл aspx.cs:
SqlConnection conn = new SqlConnection("Data Source=localhost\sqlexpress;Database=Northwind;User Id=sa ;Password=1234");
protected void Page_Load(object sender, EventArgs e)
{
BindData();
}
void BindData() {
DataSet ds = new DataSet();
DataTable FromTable = new DataTable();
string cmd = "select * from EmployeeDetails";
SqlDataAdapter adp = new SqlDataAdapter(cmd, conn);
adp.Fill(ds);
FromTable = ds.Tables[0];
if (FromTable.Rows.Count > 0)
{
gvEmployeeDetails.DataSource = FromTable;
gvEmployeeDetails.DataBind();
}
else {
FromTable.Rows.Add(FromTable.NewRow());
gvEmployeeDetails.DataSource = FromTable;
gvEmployeeDetails.DataBind();
int TotalColumns = gvEmployeeDetails.Rows[0].Cells.Count;
gvEmployeeDetails.Rows[0].Cells.Clear();
gvEmployeeDetails.Rows[0].Cells.Add(new TableCell());
gvEmployeeDetails.Rows[0].Cells[0].ColumnSpan = TotalColumns;
gvEmployeeDetails.Rows[0].Cells[0].Text = "No records Found";
}
}
protected void gvEmployeeDetails_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
/// не публикуйте эту часть, Она работает
}
protected void gvEmployeeDetails_RowEditing(object sender, GridViewEditEventArgs e)
{
gvEmployeeDetails.EditIndex = e.NewEditIndex;
BindData();
}
protected void gvEmployeeDetails_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
}
protected void gvEmployeeDetails_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("ADD"))
{
TextBox txtAddEmpID = (TextBox)gvEmployeeDetails.FooterRow.FindControl("txtAddEmpID");
TextBox txtAddName = (TextBox)gvEmployeeDetails.FooterRow.FindControl("txtAddName");
TextBox txtAddDesignation = (TextBox)gvEmployeeDetails.FooterRow.FindControl("txtAddDesignation");
TextBox txtAddCity = (TextBox)gvEmployeeDetails.FooterRow.FindControl("txtAddCity");
TextBox txtAddCountry = (TextBox)gvEmployeeDetails.FooterRow.FindControl("txtAddCountry");
conn.Open();
string cmdstr = "insert EmployeeDetails values(@empid,@name,@designation,@city,@country)";
SqlCommand cmd = new SqlCommand(cmdstr, conn);
cmd.Parameters.AddWithValue("@empid", txtAddEmpID.Text);
cmd.Parameters.AddWithValue("@name", txtAddName.Text);
cmd.Parameters.AddWithValue("@designation", txtAddDesignation.Text);
cmd.Parameters.AddWithValue("@city", txtAddCity.Text);
cmd.Parameters.AddWithValue("@country", txtAddCountry.Text);
cmd.ExecuteNonQuery();
conn.Close();
BindData();
}
}
protected void gvEmployeeDetails_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvEmployeeDetails.EditIndex = -1;
}
Ответ №1:
Вы привязываете gridview к загрузке страницы, поэтому каждый раз, когда страница загружается, текст и другие элементы управления очищаются. Можете ли вы привязать данные только в том случае, если не ispostback и check?
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
BindData();
}
}
Что касается вашего вопроса,
У вас есть кнопка ссылки с именем команды Edit. Это имя команды, которая используется в представлении сетки для запуска режима редактирования для выбранной строки. Вы можете добавить сюда любой тип командных элементов управления, поскольку имя команды — «Редактировать», будет запущен режим редактирования. Если вы не добавите этот элемент управления и установите AutoGenerateEditButton=true, то по умолчанию gridview будет генерировать и редактировать кнопку с «Edit» в качестве имени команды.
Комментарии:
1. @Thakn ты Киран, Извини за мой английский, но ты понял другой вопрос
2. Я думаю, я понял ваш вопрос, обновил приведенный выше ответ.