Необходимость дважды щелкнуть в моем редактировании сетки - PullRequest
0 голосов
/ 17 декабря 2010

ОК. Итак, у меня есть веб-приложение с выпадающим полем, кнопкой показа и сеткой, которые я могу редактировать. Страница загружается, я выбираю значение раскрывающегося списка, страница загружается нормально. Однако, когда я нажимаю кнопку редактирования, мне нужно дважды щелкнуть ее, чтобы иметь возможность редактировать или отменить (с этим тоже возникают проблемы, но это уже другая проблема) В любом случае, я хочу иметь возможность одним нажатием изменить, чтобы вызвать режим редактирования обновления / отмены. Я новичок в веб-приложениях на C #, поэтому было бы полезно кое-что понять.

Спасибо

Мой ASP

<asp:GridView ID="GridView1" runat="server" CssClass="styled" 
   OnRowEditing="TaskGridView_RowEditing"
   OnRowCancelingEdit="TaskGridView_RowCancelingEdit" 
   OnRowUpdating="TaskGridView_RowUpdating"   >
   <Columns>
        <asp:CommandField ShowEditButton="True" />
   </Columns>
</asp:GridView>

My C #

protected void TaskGridView_RowEditing(object sender, GridViewEditEventArgs e)
{

    //Set the edit index.
    GridView1.EditIndex = e.NewEditIndex;
    //Bind data to the GridView control.
   // BindData();


}

protected void TaskGridView_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
    //Reset the edit index.
    GridView1.EditIndex = -1;
    //Bind data to the GridView control.
    BindData();
    Image1.Visible = true;
    Image2.Visible = false;

}

protected void TaskGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    //Retrieve the table from the session object.
    System.Data.DataTable dt = (System.Data.DataTable)Session["EditDataPage"];

    //Update the values.
    GridViewRow row = GridView1.Rows[e.RowIndex];
   // dt.Rows[row.DataItemIndex]["QuoteNumber"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
   // dt.Rows[row.DataItemIndex]["ItemNumber"] = ((TextBox)(row.Cells[2].Controls[0])).Text;
   //dt.Rows[row.DataItemIndex]["IsComplete"] = ((CheckBox)(row.Cells[3].Controls[0])).Checked;
   // dt.Rows[row.DataItemIndex]["Item"] = ((TextBox)(row.Cells[3].Controls[0])).Text;
   // dt.Rows[row.DataItemIndex]["Descp"] = ((TextBox)(row.Cells[4].Controls[0])).Text;
   // dt.Rows[row.DataItemIndex]["Route"] = ((TextBox)(row.Cells[5].Controls[0])).Text;
   // dt.Rows[row.DataItemIndex]["Unit"] = ((TextBox)(row.Cells[6].Controls[0])).Text;
   // dt.Rows[row.DataItemIndex]["IG"] = ((TextBox)(row.Cells[7].Controls[0])).Text;
   // dt.Rows[row.DataItemIndex]["EXTQTY"] = ((TextBox)(row.Cells[8].Controls[0])).Text;
  //  dt.Rows[row.DataItemIndex]["CSTCD"] = ((TextBox)(row.Cells[9].Controls[0])).Text;
  //  dt.Rows[row.DataItemIndex]["PCOST"] = ((TextBox)(row.Cells[10].Controls[0])).Text;
  //  dt.Rows[row.DataItemIndex]["SCOST"] = ((TextBox)(row.Cells[11].Controls[0])).Text;
  //  dt.Rows[row.DataItemIndex]["ACOST"] = ((TextBox)(row.Cells[12].Controls[0])).Text;
  //  dt.Rows[row.DataItemIndex]["TCOST"] = ((TextBox)(row.Cells[13].Controls[0])).Text;
  //  dt.Rows[row.DataItemIndex]["ICOST"] = ((TextBox)(row.Cells[14].Controls[0])).Text;
  //  dt.Rows[row.DataItemIndex]["BIZCODE"] = ((TextBox)(row.Cells[16].Controls[0])).Text;
 //   dt.Rows[row.DataItemIndex]["DeleteItem"] = ((TextBox)(row.Cells[17].Controls[0])).Text;

    //Reset the edit index.
    GridView1.EditIndex = -1;

    //Bind data to the GridView control.
    BindData();
}

private void BindData()
{

    GridView1.DataSource = Session["Sqldatasource1"];
    GridView1.DataBind();

Ответы [ 3 ]

3 голосов
/ 06 августа 2011

В событии редактирования строки вам нужно установить editindex, а затем привязать данные.Вы должны сделать это и в других событиях.см. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowediting.aspx

GridView1.EditIndex = e.NewEditIndex;
GridView1.DataBind();

ваш контроль может исчезнуть, если вы излишне привязываете данные.убедитесь, что вы только один раз привязываете данные в page_load.

if(!Page.IsPostBack)
    GridView1.DataBind();
1 голос
/ 30 марта 2015

Мое исправление для того, чтобы дважды щелкнуть по редактированию, включало ViewState.

Мой оригинальный Загрузить и связать:

AttribGrid.DataSource = dataset;
AttribGrid.DataBind();
ViewState["CurTable"] = dataset;

тогда мое последующее редактирование RowEditing.

protected void AttribGrid_RowEditing(object sender, GridViewEditEventArgs e)
	{
		AttribGrid.EditIndex = e.NewEditIndex;
		AttribGrid.DataSource = (DataSet)ViewState["CurTable"];
		AttribGrid.DataBind();
		
	}

Мне пришлось использовать EditIndex = newEditIndex.Когда я исключил это, мне все равно пришлось щелкнуть дважды.с приведенным выше кодом это было сделано один раз, как и ожидалось.

0 голосов
/ 17 декабря 2010

Вам не нужно устанавливать «GridView1.EditIndex» в обратном вызове редактирования или отмены.

protected void My_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
// Perform a custom action in here
// But you don't need to set GridView1.EditIndex in here, that would be bad.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...