Click here to Skip to main content
14,387,205 members
Rate this:
Please Sign up or sign in to vote.
See more:
Hi,

Here i got one requirement .......ie i have to bind coma seperated value to one linkbutton in a grid view.....but the problem is each coma separated value i have to get as each link button in same row of a grid view.....because if i click each link button(ie each coma seperated value) it should redirect to another page.....


please help me.....
Posted
Comments
Mahesh Bailwal 16-May-13 8:04am
   
Can you please provide sample data?
Member 9155255 16-May-13 8:46am
   
SELECT OPID,NAME,STRAGG(TNAME) from table1
grdTest.DataSource = c.ds.Tables[0];
grdTest.DataBind();

here in that above query STRAGG(TNAME) contains coma separated value such as xray test,sugar test...this thing i am binding to the grid with linkbutton...but the problem is linkbutton holds all the coma separated value at a time...but this thing i dont want....i need each one means if i click xray,xray related page should open....if i click sugartest,sugartest related page should open....how many coma separated value will come each should have unique link button ......please help me...
Rate this:
Please Sign up or sign in to vote.

Solution 4

You can add the Itemtemplate to the grid dynamically.
Add Placeholder and Link buttons in the place holder.

<form id="form1" runat="server">
    <div>
    <asp:GridView ID="gvTest" AutoGenerateColumns="false" runat="server">

    </asp:GridView>
    </div>
    </form>



In the code behind just add the item template.



public partial class _Default : System.Web.UI.Page
    {
        private static DataTable tblTemp = new DataTable();
        protected void Page_Load(object sender, EventArgs e)
        {
            BindGrid();
        }
        public void BindGrid()
        {
            DataTable tbl = new DataTable();
            tbl.Columns.Add("Places",typeof(string));
            tbl.Columns.Add("State",typeof(string));
            tbl.Rows.Add("Mumbai,Pune,Nasik", "Maharashtra");
            tbl.Rows.Add("Amritsar,Jalandhar", "Punjab");
            tblTemp = tbl;
            TemplateField objTemplateFieldState = new TemplateField();
            objTemplateFieldState.HeaderText = "State";
            objTemplateFieldState.HeaderStyle.Width = Unit.Percentage(30);
            objTemplateFieldState.ItemTemplate = new CreateItemTemplate(ListItemType.Item, new Label());
            gvTest.Columns.Add(objTemplateFieldState); 
            TemplateField objTemplateFieldCities = new TemplateField();
            objTemplateFieldCities.HeaderText = "Cities";
            objTemplateFieldCities.HeaderStyle.Width = Unit.Percentage(30);
            objTemplateFieldCities.ItemTemplate = new CreateItemTemplate(ListItemType.Item, new PlaceHolder());
                     
           
            gvTest.Columns.Add(objTemplateFieldCities);          
           
            gvTest.DataSource = tbl;
            gvTest.DataBind();
        }
 
        public class CreateItemTemplate : ITemplate
        {
            //Field to store the ListItemType value
            private ListItemType myListItemType;
            private Control cntrlType;
            
            int i = 0;
            
            public CreateItemTemplate()
            {
                
            }
            //Parameterrised constructor
            public CreateItemTemplate(ListItemType Item, Control cntrlTypeTemp)
            {
                myListItemType = Item;                
                cntrlType = cntrlTypeTemp;
            }
            //Overwrite the InstantiateIn() function of the ITemplate interface.
            public void InstantiateIn(System.Web.UI.Control container)
            {
                
                //Code to create the ItemTemplate and its field.
                if (myListItemType == ListItemType.Item)
                {
                    if (cntrlType is PlaceHolder)
                    {
                        PlaceHolder phCities = new PlaceHolder();
                        string[] strCities = tblTemp.Rows[i][0].ToString().Split(',');
                        foreach (string strCity in strCities)
                        {
                            LinkButton lnkCity = new LinkButton();
                            lnkCity.Text = strCity.Trim();
//Here you can add link or event for every link button
                            phCities.Controls.Add(lnkCity);
                            Literal ltr = new Literal();
                            ltr.Text = " | ";
                            phCities.Controls.Add(ltr);
                        }
                        container.Controls.Add(phCities);
                        i++;
                    }
                    if (cntrlType is Label)
                    {
                        Label lblState = new Label();
                        
                        lblState.Text = tblTemp.Rows[i][1].ToString();
 
                        container.Controls.Add(lblState);
                        i++;
                    }
                }
            }
        }
    }


It's simple and will help you to create seperate events for every link button.
   
Rate this:
Please Sign up or sign in to vote.

Solution 2

Below is the code snippet to give you an idea of one of the way to solve this problem. Let me know if you need some clarification.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //Index of the cell
            int cellIndex = 0;
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string content = e.Row.Cells[cellIndex].Text;
               var arr = content.Split(new char[] { ',' });
               StringBuilder sb = new StringBuilder();
                foreach (var item in arr)
               {
                   switch (item)
                   {
                       case "xray test":
                           sb.Append("<a href=xray.aspx> xray test </a>");
                           break;
                       case "sugar test":
                           sb.Append("<a href=sugar.aspx> sugar test </a>");
                           break;

                   }

               }
                e.Row.Cells[cellIndex].Text = sb.ToString();
            }
        }
   
Rate this:
Please Sign up or sign in to vote.

Solution 1

Try something like this:

<asp:TemplateField ...>
<ItemTemplate>

   <asp:Repeater runat="server" DataSource='<%# Eval("CsvColumn", "{0}").Split(",") %>'>
   <ItemTeplate>
      <asp:HyperLink runat="server"

         NavigateUrl='<%# "~/yourpage.aspx?value=" + HttpUtility.UrlEncode((string)Container.DataItem) %>'

         Text='<%# Container.DataItem %>'

      />
   </ItemTemplate>
   </asp:Repeater>

</ItemTemplate>
</asp:TemplateField>
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100