Christopher Fernandes Ответов: 2

Динамическое добавление номера строки столбца в ASP.NET gridview


Я знаю, как добавить строку no в asp.net gridview с использованием приведенного ниже фрагмента кода

<asp:GridView ID="gvLeaveRequest" runat="server" DataKeyField="AID" AutoGenerateColumns="False" CellPadding="4" EnableModelValidation="True" GridLines="Both" DataKeyNames="AID" CssClass="gvTable"
AllowPaging="True" PagerSettings-Mode="NextPreviousFirstLast" PagerSettings-FirstPageText="First" PagerSettings-LastPageText="Last"
PagerSettings-NextPageText="Next" PagerSettings-PreviousPageText="Previous" PageSize="75" OnPageIndexChanging="gvLeaveRequest_PageIndexChanging">
<AlternatingRowStyle BackColor="#FFFFFF" ForeColor="#000000"/>
<Columns>
<asp:TemplateField>
<HeaderTemplate>#</HeaderTemplate>
<ItemTemplate><%#Container.DataItemIndex + 1 %></ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="APStartDateVal" HeaderText="Calendar Start Date" />
<asp:BoundField DataField="APEndDateVal" HeaderText="Calendar End Date" />
<asp:BoundField DataField="EmpFullName" HeaderText="Employee Name" />
<asp:BoundField DataField="LeaveStartDateVal" HeaderText="Start Date" />
<asp:BoundField DataField="LeaveEndDateVal" HeaderText="End Date" />
<asp:BoundField DataField="LeaveStartTimeVal" HeaderText="Start Time" />
<asp:BoundField DataField="LeaveEndTimeVal" HeaderText="End Time" />
<asp:BoundField DataField="LeaveCount" HeaderText="Leave Count" />
<asp:BoundField DataField="LTName" HeaderText="Leave Type" />
<asp:BoundField DataField="LDName" HeaderText="Leave Duration" />
<asp:BoundField DataField="LSName" HeaderText="Leave Status Name" />
<asp:BoundField DataField="LeaveReason" HeaderText="Reason" />
<asp:BoundField DataField="DateAppliedOn" HeaderText="Date Applied On" />
<asp:HyperLinkField DataNavigateUrlFields="AID,EID" Text="Edit" HeaderText="Edit" DataNavigateUrlFormatString="UpdatePastLeaves.aspx?lvid={0}&eid={1}" />
<asp:HyperLinkField DataNavigateUrlFields="AID,EID" Text="Cancel" HeaderText="Cancel" DataNavigateUrlFormatString="CancelPastLeaves.aspx?lvid={0}&eid={1}" />
<asp:HyperLinkField DataNavigateUrlFields="AID,EID" Text="Delete" HeaderText="Delete" DataNavigateUrlFormatString="DeletePastLeaves.aspx?lvid={0}&eid={1}" />
</Columns>
<EditRowStyle BackColor="#D3D3D3" />
<FooterStyle BackColor="#A8A8A8" Font-Bold="True" ForeColor="#000000" />
<HeaderStyle BackColor="#A8A8A8" Font-Bold="True" ForeColor="#000000" />
<PagerStyle BackColor="#A8A8A8" HorizontalAlign="Center" ForeColor="#000000"/>
<RowStyle BackColor="#D3D3D3" />
<SelectedRowStyle BackColor="#D3D3D3" Font-Bold="True" ForeColor="#000000" />
</asp:GridView>


Есть ли какой-нибудь способ с помощью кода c# добавить номер строки столбца в asp.net гридвью?

Этот приведенный ниже фрагмент кода делает то же самое с помощью asp.net синтаксис.
<asp:TemplateField>
<HeaderTemplate>#</HeaderTemplate>
<ItemTemplate><%#Container.DataItemIndex + 1 %></ItemTemplate>
</asp:TemplateField>


Пожалуйста помочь

Что я уже пробовал:

Я не хочу использовать событие row databound для достижения этой цели. Для этого мне нужен код c#.

2 Ответов

Рейтинг:
18

Vincent Maverick Durano

То GridView управление будет генерировать данные на основе его datasource, так что технически вы могли бы манипулировать datasource и добавьте туда все, что вам нравится, прежде чем заполнять сетку. Например, если вы используете DataTable, вы могли бы построить Rows и Columns динамически и заполнять их данными:

DataTable dt = new DataTable();
DataRow dr = null;

dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("Column1", typeof(string)));
dt.Columns.Add(new DataColumn("Column2", typeof(string)));value
// add as many as you like

dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["Column1"] = string.Empty;
dr["Column2"] = string.Empty;
dt.Rows.Add(dr);

//Bind the Gridview
Gridview1.DataSource = dt;
Gridview1.DataBind();


Если у вас есть существующий DataTable и хотел бы добавить новый Column для вашего номера строки, то вы должны повторить к каждому DataRow и добавьте номер строки:

DataTable source = ???; //Set the datasource here
DataColumn newCol = new DataColumn("RowNumber", typeof(string));
tbl.Columns.Add(newCol);
int i = 0;
foreach (DataRow row in source.Rows) {
    i++;
    row["RowNumber"] = i.ToString();
}


С помощью этого вы можете затем установить RowNumber колонка как DataField вот такая ценность:

<asp:BoundField DataField="RowNumber" HeaderText="Row Number" />


Рейтинг:
1

Gerry Schmitz

Ничего больше не зная о вашем приложении, я бы создал подкласс с добавленным идентификатором; или, проще говоря, создал класс "conainer" для хранения любого нового поля(полей) и ссылки на "старую" "запись".

public class xxx {
   public int Index {get;set;}
   public Foo DataItem {get;set;}
}


Справочник по свойствам элемента данных, используя точечную нотацию:

... DataField="DataItem.Axxxx" ...


Используйте LINQ или что - то еще, чтобы создать компоненты "items source" из исходного кода.

Или используйте DataSet / DataTable.

Или SQL ... в зависимости от вашего исходного источника данных.

Что я упустил из виду?