Я могу создать BoundFields и нижнего колонтитула строки динамически, как это в моей GridView:asp.net - GridView динамическое создание строки колонтитула проблема
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
CreateGridView();
}
}
private void CreateGridView()
{
GridView1.Columns.Clear();
DataTable dataTable = Book.GetBooksDataSet().Tables[0];
CommandField cf = new CommandField();
cf.ShowEditButton = true;
GridView1.Columns.Add(cf);
int colCount = 1;
foreach (DataColumn c in dataTable.Columns)
{
BoundField boundField = new BoundField();
boundField.DataField = c.ColumnName;
boundField.HeaderText = c.ColumnName;
//boundField.FooterText = "---";
if (colCount == 3 || colCount == 5)
{
boundField.ReadOnly = true;
}
GridView1.Columns.Add(boundField);
colCount++;
}
GridView1.ShowFooter = true;
GridView1.DataSource = dataTable;
GridView1.DataBind();
GridViewRow footerRow = GridView1.FooterRow;
Button b = new Button();
b.Text = "Add New";
int i = 0;
footerRow.Cells[i].Controls.Add(b);
foreach (DataColumn c in dataTable.Columns)
{
++i;
TextBox tb = new TextBox();
footerRow.Cells[i].Controls.Add(tb);
}
}
....................................
....................................
....................................
}
Но проблема в том, когда я нажимаю на «Add New» - кнопка, она мгновенно исчезает. И также я не могу добавить к нему никакого обработчика событий. Или перехватить его действия, как это:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int index = Convert.ToInt32(e.CommandArgument);
if (e.CommandName == "Edit")
{
GridView1.EditIndex = index;
GridViewRow selectedRow = ((GridView)e.CommandSource).Rows[index];
//We can get cell data like this
string id = selectedRow.Cells[1].Text;
string isbn = selectedRow.Cells[2].Text;
//This is necessary to GridView to be showed up.
CreateGridView();
}
else if (e.CommandName == "Update")
{
LinkButton updateButton = (LinkButton)e.CommandSource;
DataControlFieldCell dcfc = (DataControlFieldCell)updateButton.Parent;
GridViewRow gvr = (GridViewRow)dcfc.Parent;
//The update...................
//Update grid-data to database
UpdateDataInTheDatabase(gvr.Cells[1].Controls);
//Grid goes back to normal
GridView1.EditIndex = -1;
//This is necessary to GridView to be showed up.
CreateGridView();
}
}
Еще одна вещь, я видел некоторые решения, которые предлагает обрабатывать rowBound
событие в GridView в. Но мне нужно сделать это с помощью обработчика события Page_load
или в, GridView1_RowCommand
обработчика событий.
Вы были в состоянии решить эту проблему? –
Нет. Я удалил if (! Page.IsPostBack) из Page_Load(), но теперь я получаю «строка ввода не в правильном формате» в GridView1_RowCommand() в строке, int index = Convert.ToInt32 (e .CommandArgument). То есть, я не могу перехватить событие нажатия кнопки для «Добавить новое». – anonymous
Я добавил несколько примеров кода в свой ответ. Надеюсь, поможет. –