Hi
Don't know about datagrid; but if you use a gridview you just set the text
property of the cell to null and the button vanishes and is thus disabled
(also the row is not contracted to the left)
Viz.
spreadsCell.Text = null;
(see the very end of this listing for usage within context)
horizButton is being turned off when it has no details to display
HTH
Mark Carew
-------------------------------------------------
using System;
using System.Data;
using System.Data.Common;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class issues : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session.Remove("articleno");
}
protected void umeArticlesRowCommand(Object src, GridViewCommandEventArgs
e)
{
string commandIs = e.CommandName;
if (commandIs == "HorizSpreads")
{
// get the row index stored in the CommandArgument property
int index = Convert.ToInt32(e.CommandArgument);
// get the GridViewRow where the command is raised
GridViewRow selectedRow = ((GridView)e.CommandSource).Rows[index];
// get the umeNo
string spreadUmeNo = selectedRow.Cells[0].Text;
// get the ArticleNo
string spreadArticleNo = selectedRow.Cells[1].Text;
// Show the spreads
Session["UmeNo"] = spreadUmeNo;
Session["ArticleNo"] = spreadArticleNo;
Server.Transfer("scrollSpreads.aspx");
}
}
protected void umeIssuesRowDataBound(object sender, GridViewRowEventArgs
e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridView gva = (GridView)e.Row.FindControl("umeArticlesGridView");
string connectString =
ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
// get the description or the articles for this issue
string stringUmeNo =
((DataRowView)e.Row.DataItem)["umeno"].ToString();
string umeArticleSelectCommand =
"SELECT * FROM umeArticle WHERE umeno = " +
stringUmeNo;
SqlDataSource arts =
new SqlDataSource(connectString, umeArticleSelectCommand);
gva.DataSource = arts;
gva.AutoGenerateColumns = false;
//
BoundField bfUme = new BoundField();
bfUme.DataField = "umeNo";
gva.Columns.Add(bfUme);
gva.Columns[0].ItemStyle.Width = 25;
//
BoundField bfArticle = new BoundField();
bfArticle.DataField = "articleNo";
gva.Columns.Add(bfArticle);
gva.Columns[1].ItemStyle.Width = 25;
//
ButtonField horizButton = new ButtonField();
horizButton.ButtonType = ButtonType.Image;
horizButton.ImageUrl = "./Images/smallbluebutton.gif";
horizButton.CommandName = "HorizSpreads";
gva.Columns.Add(horizButton);
gva.Columns[2].ItemStyle.Width = 25;
//
BoundField bfDescription = new BoundField();
bfDescription.DataField = "description";
bfDescription.ItemStyle.Font.Name = "arial";
bfDescription.ItemStyle.Font.Size = 9;
bfDescription.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
gva.Columns.Add(bfDescription);
gva.Columns[3].ItemStyle.Width = 550;
//
gva.RowDataBound += new
GridViewRowEventHandler(adjustSpreadRowVisibility);
//
gva.DataBind();
}
}
protected void adjustSpreadRowVisibility(object sender,
GridViewRowEventArgs e)
{
// for row that are data rows
if (e.Row.RowType == DataControlRowType.DataRow)
{
TableCell umeNo = e.Row.Cells[0];
umeNo.Visible = false;
TableCell articleNo = e.Row.Cells[1];
articleNo.Visible = false;
// get a reference to the spreads button cell
TableCell spreadsCell = e.Row.Cells[2];
// source the connection string from web.config
string connectString =
ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
// get the description or the articles for this issue
string stringUmeNo =
((DataRowView)e.Row.DataItem)["umeno"].ToString();
string stringArticleNo =
((DataRowView)e.Row.DataItem)["articleno"].ToString();
// create a factory to use for the count retrieval
DbProviderFactory factory;
string provider = "System.Data.SqlClient";
factory = DbProviderFactories.GetFactory(provider);
// open the connection
DbConnection conn = factory.CreateConnection();
conn.ConnectionString = connectString;
conn.Open();
// create the database command required to issue the count
DbCommand cmd = factory.CreateCommand();
cmd.CommandText =
"SELECT count(*) FROM umeSpread WHERE umeno = " +
stringUmeNo +
" AND articleNo = " +
stringArticleNo +
" AND spreadImage <> ''";
cmd.Connection = conn;
// execute the count query returning a single value
string spreadCountdr = cmd.ExecuteScalar().ToString();
conn.Close();
if (spreadCountdr == "0")
{
spreadsCell.Text = null;
// spreadsCell.Visible = false;
}
}
}
}