User-740209433 posted
Hi,
I have a gridview initiated in the aspx page without any column
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
OnRowCommand="GridView1_RowCommand" OnRowDataBound="GridView1_RowDataBound">
</asp:GridView>
I dynamically create the column on the fly from a DB. There are regular text columns and I also wanted to have a column with dropdown and an Apply button which I do have my own code.
When I click on the button, the dropdown boxes disappears so does the "Apply" button. If I don't add "if (!IsPostBack) in Page_load, it works perfectly. What should I do in order to get this right? Please advice.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
gvbind();
}
}
protected void gvbind()
{
try
{
conn.Open();
SqlCommand cmd = new SqlCommand("Select * from tbl", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
conn.Close();
if (ds.Tables[0].Rows.Count > 0)
{
GridView1.Columns.Clear();
DataTable dt = new DataTable();
dt = ds.Tables[0];
for (int i = 0; i < dt.Columns.Count; i++)
{
if (dt.Columns[i].ColumnName.ToString() != "SpecialColumn")
{
BoundField boundField = new BoundField();
boundField.ReadOnly = true;
boundField.DataField = dt.Columns[i].ColumnName.ToString();
boundField.HeaderText = dt.Columns[i].ColumnName.ToString();
GridView1.Columns.Add(boundField);
}
else
{
TemplateField ddlTmpField = new TemplateField();
ddlTmpField.HeaderText = "SpecialColumn";
ddlTmpField.ItemTemplate = new DropdownColumn();
GridView1.Columns.Add(ddlTmpField);
}
}
TemplateField btnTmpField = new TemplateField();
btnTmpField.ItemTemplate = new ButtonColumn();
GridView1.Columns.Add(btnTmpField);
GridView1.DataSource = ds;
GridView1.DataBind();
GridView1.Width = 1000;
}
//Dropdown and Button itemTemplate
public class DropdownColumn : ITemplate
{
public void InstantiateIn(System.Web.UI.Control container)
{
DropDownList dl = new DropDownList();
dl.ID = "ddl";
dl.DataTextField = "SpecialColumn";
dl.DataValueField = "SpecialColumn";
container.Controls.Add(dl);
}
}
public class ButtonColumn : ITemplate
{
public void InstantiateIn(System.Web.UI.Control container)
{
Button btn = new Button();
btn.ID = "btnApply";
btn.Text = "Apply";
container.Controls.Add(btn);
}
}