#c# #asp.net #gridview
#c# #asp.net #просмотр сетки
Вопрос:
Я реализую gridview с кнопкой внутри каждой ячейки. Но я не могу понять, почему кнопки внутри ячейки в gridview не запускаются. Я использовал gridview RowDataBound и RowCommand, чтобы проверить, активируются ли кнопки. Я также создаю кнопку вне gridview, но она работает так, как ожидалось. Я действительно не могу понять, почему кнопка в ячейке gridview не запускается после нажатия.
Сгенерируйте gridview на code-behind.
DataTable dataTable = new DataTable();
dataTable.Columns.AddRange(new DataColumn[32]
{
new DataColumn("Month"),
new DataColumn("Day1"),
new DataColumn("Day2"),
new DataColumn("Day3"),
new DataColumn("Day4"),
new DataColumn("Day5"),
new DataColumn("Day6"),
new DataColumn("Day7"),
new DataColumn("Day8"),
new DataColumn("Day9"),
new DataColumn("Day10"),
new DataColumn("Day11"),
new DataColumn("Day12"),
new DataColumn("Day13"),
new DataColumn("Day14"),
new DataColumn("Day15"),
new DataColumn("Day16"),
new DataColumn("Day17"),
new DataColumn("Day18"),
new DataColumn("Day19"),
new DataColumn("Day20"),
new DataColumn("Day21"),
new DataColumn("Day22"),
new DataColumn("Day23"),
new DataColumn("Day24"),
new DataColumn("Day25"),
new DataColumn("Day26"),
new DataColumn("Day27"),
new DataColumn("Day28"),
new DataColumn("Day29"),
new DataColumn("Day30"),
new DataColumn("Day31")
});
DataRow dataRow;
var months = new string[] { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" };
for (int i = 0; i < 12; i )
{
dataRow = dataTable.NewRow();
dataRow["Month"] = months[i];
for (int j = 0; j < 30; j )
{
}
dataTable.Rows.Add(dataRow);
}
GridView.DataSource = dataTable;
GridView.DataBind();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadDataSources();
}
}
Визуализируйте кнопку в ячейке.
protected void GridViewPricing_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
for (int i = 1; i <= 31; i )
{
var button = new Button();
button.ID = string.Format("{0}", i);
button.Attributes.Add("style", "display:block; padding:4px; width:100%; height:100%;");
button.CommandName = "ButtonCell";
button.CommandArgument = "ButtonCell";
e.Row.Cells[i].Controls.Add(button);
}
}
}
Проверьте, срабатывает ли кнопка после нажатия.
protected void ButtonCell_Click(object sender, EventArgs e)
{
Response.Write("Button Click");
}
protected void GridViewPricing_RowCommand(object sender, GridViewCommandEventArgs e)
{
Response.Write("Button Click");
}
Это для просмотра.
<asp:GridView ID="GridView"
runat="server"
AutoGenerateColumns="false"
CellPadding="0"
CellSpacing="0"
OnRowDataBound="GridViewPricing_RowDataBound"
OnRowCommand="GridViewPricing_RowCommand">
<Columns>
<asp:BoundField DataField="Month" HeaderText="" />
<asp:BoundField DataField="Day1" HeaderText="1" />
<asp:BoundField DataField="Day2" HeaderText="2" />
<asp:BoundField DataField="Day3" HeaderText="3" />
<asp:BoundField DataField="Day4" HeaderText="4" />
<asp:BoundField DataField="Day5" HeaderText="5" />
<asp:BoundField DataField="Day6" HeaderText="6" />
<asp:BoundField DataField="Day7" HeaderText="7" />
<asp:BoundField DataField="Day8" HeaderText="8" />
<asp:BoundField DataField="Day9" HeaderText="9" />
<asp:BoundField DataField="Day10" HeaderText="10" />
<asp:BoundField DataField="Day11" HeaderText="11" />
<asp:BoundField DataField="Day12" HeaderText="12" />
<asp:BoundField DataField="Day13" HeaderText="13" />
<asp:BoundField DataField="Day14" HeaderText="14" />
<asp:BoundField DataField="Day15" HeaderText="15" />
<asp:BoundField DataField="Day16" HeaderText="16" />
<asp:BoundField DataField="Day17" HeaderText="17" />
<asp:BoundField DataField="Day18" HeaderText="18" />
<asp:BoundField DataField="Day19" HeaderText="19" />
<asp:BoundField DataField="Day20" HeaderText="20" />
<asp:BoundField DataField="Day21" HeaderText="21" />
<asp:BoundField DataField="Day22" HeaderText="22" />
<asp:BoundField DataField="Day23" HeaderText="23" />
<asp:BoundField DataField="Day24" HeaderText="24" />
<asp:BoundField DataField="Day25" HeaderText="25" />
<asp:BoundField DataField="Day26" HeaderText="26" />
<asp:BoundField DataField="Day27" HeaderText="27" />
<asp:BoundField DataField="Day28" HeaderText="28" />
<asp:BoundField DataField="Day29" HeaderText="29" />
<asp:BoundField DataField="Day30" HeaderText="30" />
<asp:BoundField DataField="Day31" HeaderText="31" />
</Columns>
</asp:GridView>
Комментарии:
1. Снимите
IsPostBack
галочку вокругLoadDataSources();
.
Ответ №1:
Попробуйте это:
Добавить кнопку перед закрытием тега columns
элемента
<asp:BoundField DataField="Day31" HeaderText="31" />
<asp:ButtonField ButtonType="Button" CommandName="ButtonCommandName" HeaderText="Buttons"
ShowHeader="True" Text="Click Me" ItemStyle-Width="30px" />
</Columns>
В вашей команде GridView_RowCommand
protected void GridViewPricing_RowCommand(object sender, GridViewCommandEventArgs e)
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow gvRow = GridViewPricing.Rows[index];
if (e.CommandName == "ButtonCommandName")
{
//Your Code here something like
gvRow.Cells[0].Text
}
}
Комментарии:
1. это работает. но я хочу отобразить всю ячейку кнопки, кроме названия месяца, дней столбца.
2. Ваша проблема просто в событии щелчка по кнопке .. если это работает и помогает вашей проблеме, тогда вы можете сделать это в соответствии с ответом.