webForumDet fria alternativet

Hur får jag fram vilken kolumn?

.NET

4 svar · 474 visningar · startad av inspiro

Medlem sedan sep. 2005673 inlägg
Frågan#1

När jag sorterar min datagrid så vill jag få fram vilken kolumn jag sorterade (alltså kolumnens index) i item_command-eventet. Alltså typ samma sak som när man tar fram vilken rad man är på:

e.Item.ItemIndex

Fast jag vill då få fram vilken kolumn jag sorterade...

Medlem sedan sep. 2005673 inlägg
#2

Jag har en lösning men den är ju riktigt usel så jag skulle gärna ha en bättre, men så här har jag gjort nu för att kunna lägga in en pil som visar i vilken kolumn man sorterar och åt vilket håll:

När jag trycker på länken som sorterar datagriden körs item command-eventet först. Där hämtar jag den linkbutton (det är en sådan man trycker på i headern har jag klurat ut) som körde eventet och plockar ut link-buttonens uniqueID:

((LinkButton)e.CommandSource).UniqueID

I kolumn 1 har den nämligen ett uniqueID som är nånting_0, i nästa kolumn har den id 1 osv. Detta id lägger jag in i en publik variabel som jag använder i min ortCommandEvent som ju körs efter itemcommand.

I sortCommandEvent får jag nu leta upp cellen där min linkbutton finns och med hjälp av det uniqueID som jag sparat undan kan jag bluffa mig till rätt ställe:

DataGridItem dgi = (DataGridItem)((DataGrid)source).Controls[0].Controls[0];
LinkButton HeaderTxtLB = (LinkButton)((TableCell)((DataGridItem)dgi).Controls[UniqueID+1]).Controls[0];

HeaderTxtLB är nu den linkbutton i den kolumn som jag tryckte på när jag sorterade min datagrid. Så nu kan jag lägga in en bild med en bil som visar att det är den här kolumnen som är sorterad och åt vilket håll:

HeaderTxtLB.Text = "<img src='/images/"+ViewState["sortOrder"]+".gif' border='0'>";

Som ni ser så är det här en väldigt risky lösning som kan gå fel, så om jag kunde få tag på kolumnid så får ni gärna berätta hur!

Medlem sedan sep. 2005673 inlägg
#3

Ingen som kan? ;) Kanske inte går? Ta ett exempel som borde vara superlätt, om jag klickar på en linkbutton som finns exempelvis i 3:e kolumnen från vänster i en datagrid... hur får jag fram kolumnens nummer dynamiskt?

Medlem sedan sep. 20011 914 inlägg
#4

.aspx

<asp:datagrid id="DataGrid1" runat="server" autogeneratecolumns="False" allowsorting="True">
   <columns>
      <asp:boundcolumn datafield="AAA" sortexpression="1" headertext="1:AAA" />
      <asp:boundcolumn datafield="BBB" sortexpression="2" headertext="2:BBB" />
      <asp:boundcolumn datafield="CCC" sortexpression="3" headertext="3:CCC" />
      <asp:boundcolumn datafield="DDD" sortexpression="4" headertext="4:DDD" />
   </columns>
</asp:datagrid>

.cs

protected System.Web.UI.WebControls.DataGrid DataGrid1;
    
private void Page_Load(object sender, System.EventArgs e)
{
   if(!IsPostBack)
      Bind();
}

private void Bind()
{
   ArrayList col = new ArrayList();
   col.Add(new Letter("A1", "B1", "C1", "D1"));
   col.Add(new Letter("A2", "B2", "C2", "D2"));
   col.Add(new Letter("A3", "B3", "C3", "D3"));
   col.Add(new Letter("A4", "B4", "C4", "D4"));

   DataGrid1.DataSource = col;
   DataGrid1.DataBind();
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
   InitializeComponent();
   base.OnInit(e);
}

private void InitializeComponent()
{    
   this.DataGrid1.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.DataGrid1_SortCommand);
   this.Load += new System.EventHandler(this.Page_Load);
}
#endregion

private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
   Response.Write(e.SortExpression);
}
Medlem sedan sep. 2005673 inlägg
#5

Ah så enkelt! Tack! :)

265 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)