且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在数据网格动态ASP.NET中向特定单元格添加按钮?

更新时间:2023-12-03 14:24:28

\");
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindEmployeeDetails();
}
}
protected void BindEmployeeDetails()
{
con.Open();
SqlCommand cmd = new SqlCommand(\"Select * from Employee_Details\", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
con.Close();
if (ds.Tables[0].Rows.Count > 0)
{
gvDetails.DataSource = ds;
gvDetails.DataBind();
}
else
{
ds.Tables[0].Rows.Add(ds.Tables[0].NewRow());
gvDetails.DataSource = ds;
gvDetails.DataBind();
int columncount = gvDetails.Rows[0].Cells.Count;
gvDetails.Rows[0].Cells.Clear();
gvDetails.Rows[0].Cells.Add(new TableCell());
gvDetails.Rows[0].Cells[0].ColumnSpan = columncount;
gvDetails.Rows[0].Cells[0].Text = \"No Records Found\";
}
}
protected void gvDetails_RowEditing(object sender, GridViewEditEventArgs e)
{
gvDetails.EditIndex = e.NewEditIndex;
BindEmployeeDetails();
}
protected void gvDetails_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int userid = Convert.ToInt32(gvDetails.DataKeys[e.RowIndex].Value.ToString());
string username = gvDetails.DataKeys[e.RowIndex].Values[\"UserName\"].ToString();
TextBox txtcity = (TextBox)gvDetails.Rows[e.RowIndex].FindControl(\"txtcity\");
TextBox txtDesignation = (TextBox)gvDetails.Rows[e.RowIndex].FindControl(\"txtDesg\");
con.Open();
SqlCommand cmd = new SqlCommand(\"update Employee_Details set City='\" + txtcity.Text + \"',Designation='\" + txtDesignation.Text + \"' where UserId=\" + userid, con);
cmd.ExecuteNonQuery();
con.Close();
lblresult.ForeColor = Color.Green;
lblresult.Text = username + \" Details Updated successfully\";
gvDetails.EditIndex = -1;
BindEmployeeDetails();
}
protected void gvDetails_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvDetails.EditIndex = -1;
BindEmployeeDetails();
}
protected void gvDetails_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int userid = Convert.ToInt32(gvDetails.DataKeys[e.RowIndex].Values[\"UserId\"].ToString());
string username = gvDetails.DataKeys[e.RowIndex].Values[\"UserName\"].ToString();
con.Open();
SqlCommand cmd = new SqlCommand(\"delete from Employee_Details where UserId=\" + userid, con);
int result = cmd.ExecuteNonQuery();
con.Close();
if (result == 1)
{
BindEmployeeDetails();
lblresult.ForeColor = Color.Red;
lblresult.Text = username + \" details deleted successfully\";
}
}
protected void gvDetails_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals(\"AddNew\"))
{
TextBox txtUsrname = (TextBox)gvDetails.FooterRow.FindControl(\"txtftrusrname\");
TextBox txtCity = (TextBox)gvDetails.FooterRow.FindControl(\"txtftrcity\");
TextBox txtDesgnation = (TextBox)gvDetails.FooterRow.FindControl(\"txtftrDesignation\");
con.Open();
SqlCommand cmd =
new SqlCommand(
\"insert into Employee_Details(UserName,City,Designation) values('\" + txtUsrname.Text + \"','\" +
txtCity.Text + \"','\" + txtDesgnation.Text + \"')\", con);
int result = cmd.ExecuteNonQuery();
con.Close();
if (result == 1)
{
BindEmployeeDetails();
lblresult.ForeColor = Color.Green;
lblresult.Text = txtUsrname.Text + \" Details inserted successfully\";
}
else
{
lblresult.ForeColor = Color.Red;
lblresult.Text = txtUsrname.Text + \" Details not inserted\";
}
}
}
"); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindEmployeeDetails(); } } protected void BindEmployeeDetails() { con.Open(); SqlCommand cmd = new SqlCommand("Select * from Employee_Details", con); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); con.Close(); if (ds.Tables[0].Rows.Count > 0) { gvDetails.DataSource = ds; gvDetails.DataBind(); } else { ds.Tables[0].Rows.Add(ds.Tables[0].NewRow()); gvDetails.DataSource = ds; gvDetails.DataBind(); int columncount = gvDetails.Rows[0].Cells.Count; gvDetails.Rows[0].Cells.Clear(); gvDetails.Rows[0].Cells.Add(new TableCell()); gvDetails.Rows[0].Cells[0].ColumnSpan = columncount; gvDetails.Rows[0].Cells[0].Text = "No Records Found"; } } protected void gvDetails_RowEditing(object sender, GridViewEditEventArgs e) { gvDetails.EditIndex = e.NewEditIndex; BindEmployeeDetails(); } protected void gvDetails_RowUpdating(object sender, GridViewUpdateEventArgs e) { int userid = Convert.ToInt32(gvDetails.DataKeys[e.RowIndex].Value.ToString()); string username = gvDetails.DataKeys[e.RowIndex].Values["UserName"].ToString(); TextBox txtcity = (TextBox)gvDetails.Rows[e.RowIndex].FindControl("txtcity"); TextBox txtDesignation = (TextBox)gvDetails.Rows[e.RowIndex].FindControl("txtDesg"); con.Open(); SqlCommand cmd = new SqlCommand("update Employee_Details set City='" + txtcity.Text + "',Designation='" + txtDesignation.Text + "' where UserId=" + userid, con); cmd.ExecuteNonQuery(); con.Close(); lblresult.ForeColor = Color.Green; lblresult.Text = username + " Details Updated successfully"; gvDetails.EditIndex = -1; BindEmployeeDetails(); } protected void gvDetails_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { gvDetails.EditIndex = -1; BindEmployeeDetails(); } protected void gvDetails_RowDeleting(object sender, GridViewDeleteEventArgs e) { int userid = Convert.ToInt32(gvDetails.DataKeys[e.RowIndex].Values["UserId"].ToString()); string username = gvDetails.DataKeys[e.RowIndex].Values["UserName"].ToString(); con.Open(); SqlCommand cmd = new SqlCommand("delete from Employee_Details where UserId=" + userid, con); int result = cmd.ExecuteNonQuery(); con.Close(); if (result == 1) { BindEmployeeDetails(); lblresult.ForeColor = Color.Red; lblresult.Text = username + " details deleted successfully"; } } protected void gvDetails_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName.Equals("AddNew")) { TextBox txtUsrname = (TextBox)gvDetails.FooterRow.FindControl("txtftrusrname"); TextBox txtCity = (TextBox)gvDetails.FooterRow.FindControl("txtftrcity"); TextBox txtDesgnation = (TextBox)gvDetails.FooterRow.FindControl("txtftrDesignation"); con.Open(); SqlCommand cmd = new SqlCommand( "insert into Employee_Details(UserName,City,Designation) values('" + txtUsrname.Text + "','" + txtCity.Text + "','" + txtDesgnation.Text + "')", con); int result = cmd.ExecuteNonQuery(); con.Close(); if (result == 1) { BindEmployeeDetails(); lblresult.ForeColor = Color.Green; lblresult.Text = txtUsrname.Text + " Details inserted successfully"; } else { lblresult.ForeColor = Color.Red; lblresult.Text = txtUsrname.Text + " Details not inserted"; } } }





my aspx code is:-





my aspx code is:-

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<style type="text/css">
.Gridview
{
font-family:Verdana;
font-size:10pt;
font-weight:normal;
color:black;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvDetails" DataKeyNames="UserId,UserName" runat="server"

AutoGenerateColumns="false" CssClass="Gridview" HeaderStyle-BackColor="#61A6F8"

ShowFooter="true" HeaderStyle-Font-Bold="true" HeaderStyle-ForeColor="White"

onrowcancelingedit="gvDetails_RowCancelingEdit"

onrowdeleting="gvDetails_RowDeleting" onrowediting="gvDetails_RowEditing"

onrowupdating="gvDetails_RowUpdating"

onrowcommand="gvDetails_RowCommand">
<Columns>
    <asp:TemplateField>
        <EditItemTemplate>
            <asp:ImageButton ID="imgbtnUpdate" CommandName="Update" runat="server" value="update" ImageUrl="~/Images/update.jpg" ToolTip="Update" Height="20px" Width="20px" />
            <asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel" value="Cancel"  ImageUrl="~/Images/Cancel.jpg" ToolTip="Cancel" Height="20px" Width="20px" />
        </EditItemTemplate>
        <ItemTemplate>
            <asp:ImageButton ID="imgbtnEdit" CommandName="Edit" runat="server" ImageUrl="~/Images/Edit.jpg" ToolTip="Edit" Height="20px" Width="20px" />
            <asp:ImageButton ID="imgbtnDelete" CommandName="Delete" Text="Edit" runat="server" ImageUrl="~/Images/delete.jpg" ToolTip="Delete" Height="20px" Width="20px" />
        </ItemTemplate>
        <FooterTemplate>
            <asp:ImageButton ID="imgbtnAdd" runat="server" ImageUrl="~/Images/AddNewitem.jpg" CommandName="AddNew" Width="30px" Height="30px" ToolTip="Add new User" ValidationGroup="validaiton" />
        </FooterTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="UserName">
        <EditItemTemplate>
           <asp:Label ID="lbleditusr" runat="server" Text='<%#Eval("Username") %>'/>
        </EditItemTemplate>
        <ItemTemplate>
          <asp:Label ID="lblitemUsr" runat="server" Text='<%#Eval("UserName") %>'/>
        </ItemTemplate>
        <FooterTemplate>
            <asp:TextBox ID="txtftrusrname" runat="server"/>
            <asp:RequiredFieldValidator ID="rfvusername" runat="server" ControlToValidate="txtftrusrname" Text="*" ValidationGroup="validaiton"/>
        </FooterTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="City">
        <EditItemTemplate>
           <asp:TextBox ID="txtcity" runat="server" Text='<%#Eval("City") %>'/>
        </EditItemTemplate>
        <ItemTemplate>
          <asp:Label ID="lblcity" runat="server" Text='<%#Eval("City") %>'/>
        </ItemTemplate>
        <FooterTemplate>
            <asp:TextBox ID="txtftrcity" runat="server"/>
            <asp:RequiredFieldValidator ID="rfvcity" runat="server" ControlToValidate="txtftrcity" Text="*" ValidationGroup="validaiton"/>
        </FooterTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Designation">
        <EditItemTemplate>
          <asp:TextBox ID="txtDesg" runat="server" Text='<%#Eval("Designation") %>'/>
        </EditItemTemplate>
        <ItemTemplate>
          <asp:Label ID="lblDesg" runat="server" Text='<%#Eval("Designation") %>'/>
        </ItemTemplate>
        <FooterTemplate>
           <asp:TextBox ID="txtftrDesignation" runat="server"/>
           <asp:RequiredFieldValidator ID="rfvdesignation" runat="server" ControlToValidate="txtftrDesignation" Text="*" ValidationGroup="validaiton"/>
        </FooterTemplate>
    </asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<div>
 <asp:Label ID="lblresult" runat="server"></asp:Label>
</div>
</form>
</body>
</html>


Currently your gridview is





Currently your gridview is


<asp:GridView ID="gvDetails" DataKeyNames="UserId,UserName" runat="server"

AutoGenerateColumns="false" CssClass="Gridview" HeaderStyle-BackColor="#61A6F8"

ShowFooter="true" HeaderStyle-Font-Bold="true" HeaderStyle-ForeColor="White"

onrowcancelingedit="gvDetails_RowCancelingEdit"

onrowdeleting="gvDetails_RowDeleting" onrowediting="gvDetails_RowEditing"

onrowupdating="gvDetails_RowUpdating"

onrowcommand="gvDetails_RowCommand">





Now add in end rowdatabound event





Now add in end rowdatabound event

 <asp:GridView ID="gvDetails" DataKeyNames="UserId,UserName" runat="server"

AutoGenerateColumns="false" CssClass="Gridview" HeaderStyle-BackColor="#61A6F8"

ShowFooter="true" HeaderStyle-Font-Bold="true" HeaderStyle-ForeColor="White"

onrowcancelingedit="gvDetails_RowCancelingEdit"

onrowdeleting="gvDetails_RowDeleting" onrowediting="gvDetails_RowEditing"

onrowupdating="gvDetails_RowUpdating"

onrowcommand="gvDetails_RowCommand" 

OnRowDataBound="gvDetails_RowDataBound"

>







The n in codebehind add new method for this event as






Then in codebehind add new method for this event as

protected void gvDetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType==DataControlRowType.DataRow)  
        { 
               /// here you can put ur criteria to either delete those buttons which are generating for each row except for .....
        } 
}





this method is calling for each row automatically and it is more powerful then Databound in that u’ve to use foreach



this method is calling for each row automatically and it is more powerful then Databound in that u've to use foreach


First off, don’t hard code your connection string in your code behind file. You should put the config in your web.config file under connectionString element.



Second, make it a habit to put objects that eat resources such as SqlConnection, SqlCommand and SqlDataAdapter within a using Statement[^] to ensure that objects will be properly disposed and closed after they are used.



Third, do not use DataSet when you are only dealing with 1 result set. Instead you could use a DataTable.



Now back to your original question. Since you already have setup the Edit and Delete buttons within your GridView, then you can use the RowDataBound event to hide the buttons based on your requirement. For example:



First off, don't hard code your connection string in your code behind file. You should put the config in your web.config file under connectionString element.

Second, make it a habit to put objects that eat resources such as SqlConnection, SqlCommand and SqlDataAdapter within a using Statement[^] to ensure that objects will be properly disposed and closed after they are used.

Third, do not use DataSet when you are only dealing with 1 result set. Instead you could use a DataTable.

Now back to your original question. Since you already have setup the Edit and Delete buttons within your GridView, then you can use the RowDataBound event to hide the buttons based on your requirement. For example:

protected void gvDetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        ImageButton imgEdit = (ImageButton)e.Row.FindControl("imgbtnEdit");
        ImageButton imgDelete = (ImageButton)e.Row.FindControl("imgbtnDelete");
        if("<your condition="" here="" to="" hide="" your="" buttons="">"){
                      imgEdit.Visible = false;
                      imgDelete.Visible = false;
        }
    }
}