我有这样的gridview(AllItems):
从列表中提取项目设备名称,数量,日期时间,备份时间和电源: AllItems.DataSource = LST;
项目TotalWatts,Wh / Nyt,Wh / Day必须由本地整数变量提取,但是指定的数据源不包含TotalWatts的值
我该怎么办才能使我的网格视图也接受局部变量...... ??
gridview的代码:
<asp:GridView ID="AllItems" runat="server" AutoGenerateColumns="false" Height="124px" Width="191px" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Horizontal" OnDataBound="AllItems_DataBound" ShowFooter="true" FooterStyle-BackColor="Black">
<Columns>
<asp:BoundField DataField="Applianc.Name" HeaderText="Appliance Name" />
<asp:BoundField DataField="Quantity" HeaderText="Quantity" />
<asp:BoundField DataField="DayTime" HeaderText="Day Time(Hrs)" />
<asp:BoundField DataField="BackUpTime" HeaderText="BackUp Time(Hrs)" />
<asp:BoundField DataField="Applianc.Power" HeaderText="Power(Watts)" />
<asp:BoundField DataField="TotalWatts" HeaderText="Total Watts" />
<asp:BoundField DataField="HrsNight" HeaderText="Wh/Nyt" />
<asp:BoundField DataField="HrsDay" HeaderText="Wh/Day" />
</Columns>
<FooterStyle BackColor="Black" ForeColor="White" Font-Italic="true" />
<FooterStyle BackColor="#CCCC99" ForeColor="Black" />
<HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F7F7F7" />
<SortedAscendingHeaderStyle BackColor="#4B4B4B" />
<SortedDescendingCellStyle BackColor="#E5E5E5" />
<SortedDescendingHeaderStyle BackColor="#242121" />
</asp:GridView>
按钮点击后面的代码
protected void BtnAddNext_Click(object sender, EventArgs e)
{
List<Entity.UserSiteLoad> LstUsl = (List<Entity.UserSiteLoad>)Session["MyApplianceList"];
e_usl.Applianc = new Entity.Appliance();
calcObj = new CalculatorTest();
e_usl.IdUserSiteLoad = Guid.NewGuid().ToString();
e_usl.IdUserHousing = "xxx";
e_usl.IdAppliance = DDLAppName.SelectedItem.Value.ToString(); //<<------------
e_usl.Applianc.Name = DDLAppName.SelectedItem.Text;
e_usl.Applianc.Power = new Random().Next(20, 500);
e_usl.Quantity = Convert.ToInt32(QtyTB.Text);
e_usl.DayTime = Convert.ToInt32(DayTymTB.Text);
e_usl.BackUpTime = Convert.ToInt32(BackUpTymTB.Text);
e_usl.CreatedBy = "sana";
e_usl.CreatedDate = DateTime.Now;
//e_usl.CreationDate = DateTime.Now;
e_usl.ModifiedBy = "sana";
e_usl.ModifiedDate = DateTime.Now;
e_usl.IsActive = true;
e_usl.IsDeleted = false;
if (LstUsl.Count != 0)
{
for (int rowIndex = 0; rowIndex < LstUsl.Count; rowIndex++)
{
string AppName = LstUsl[rowIndex].Applianc.Name;
if (AppName == DDLAppName.SelectedItem.Text)
{
LstUsl.Remove(LstUsl[rowIndex]);
}
}
}
if (LstUsl.Count == 0 || LstUsl.Count > 0)
{
LstUsl.Add(e_usl);
}
Session["MyApplianceList"] = LstUsl;
currentIndex = LstUsl.Count - 1; //int variable
TotalWatts = calcObj.GetTotalWattsOfEachAppliance(currentIndex); //int variable
HrsNight = calcObj.GetWattsHrPerNight(currentIndex); //int variable
HrsDay = calcObj.GetWattsHrPerDayForEachAppliance(currentIndex); //int variable
Response.Write("List Count is: " + LstUsl.Count); //check
AllItems.DataSource = LstUsl;
AllItems.DataBind();
AllItems.Visible = true;
Session["MyApplianceList"] = LstUsl;
}
答案 0 :(得分:1)
您的列表不包含以下变量(属性/列)。
TotalWatts = calcObj.GetTotalWattsOfEachAppliance(currentIndex); //int variable
HrsNight = calcObj.GetWattsHrPerNight(currentIndex); //int variable
HrsDay = calcObj.GetWattsHrPerDayForEachAppliance(currentIndex); //int variable
您无法为属性DataField <asp:BoundField DataField="TotalWatts"/>
分配公共变量值,TotalWatts应该存在于列表中(您的dataSource)。
您应该使用模板字段,如。
替换
<asp:BoundField DataField="TotalWatts" HeaderText="Total Watts" />
通过
<asp:TemplateField HeaderText="ListsID" Visible="true">
<ItemTemplate>
<asp:Literal ID="litListsID" runat="server" Text='<%# TotalWatts.ToString() %>'>
</asp:Literal>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Left" VerticalAlign="Top" />
</asp:TemplateField>
TotalWatts 应该是一个公共变量 你也可以在这里使用你的功能。
<asp:Literal ID="litListsID" runat="server" Text='<%# calcObj.GetTotalWattsOfEachAppliance(yourParameter) %>'>
答案 1 :(得分:0)
以下是一个简单的例子 希望这将完美地解决上述情况 我有一个有三个领域的产品清单。
public class Product
{
public int ID { get; set; }
public string Name { get; set; }
public double UnitPrice { get; set; }
}
我想在gridview中显示这三个字段,还在gridview中显示一个从列的现有列派生的额外列。即
ID , Name , UnitPrice , and DozenPrice(means UnitPrice * 12)
请参阅代码,希望任何人都可以解决他们显示派生列的问题
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
fillGrid();
}
public class Product
{
public int ID { get; set; }
public string Name { get; set; }
public double UnitPrice { get; set; }
}
public void fillGrid()
{
var ListProduct = new List<Product>();
ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
ListProduct.Add(new Product() { ID = 1, Name = "item1", UnitPrice = 4.5 });
GridView1.DataSource = ListProduct;
GridView1.DataBind();
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
int Dozen = 12;
if (e.Row.RowType == DataControlRowType.DataRow)
{
Product row = ((Product)e.Row.DataItem);
double UnitPrice = row.UnitPrice;
((Literal)e.Row.FindControl("ltrDozenPrice")).Text = Convert.ToString(UnitPrice * Dozen);
}
}
}
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" onrowdatabound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="UnitPrice" HeaderText="Unit Price" />
<asp:TemplateField HeaderText="DozenPrice">
<ItemTemplate>
<asp:Literal ID="ltrDozenPrice" runat="server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>