怎样在.net的GridView中每五行空一行或者显示分割线?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样在.net的GridView中每五行空一行或者显示分割线?相关的知识,希望对你有一定的参考价值。
不是你说的那样,问题是我的gridview已经绑定了 在显示时我想每隔五行就空一行或者显示分隔线 就类似图片中的一样 也就是在gridview的RowDataBound事件中给这一行添加属性之类的 具体的是什么我就不知道了
思路:修改第五行的样式,使第五行的下边框颜色为灰色,然后距离最下留15px的空白;修改第六行的样式,然后距离最上留15px的空白。这样看上去就像是每隔五行有一条空白数据作为分隔。/* --- 数据行绑定 --- */
protected void XXX_RowDataBound(object sender, GridViewRowEventArgs e)
if (e.Row.RowType == DataControlRowType.DataRow)
/* --- 数据行为第五(倍数)或者第六(倍数)的时候 --- */
if (e.Row.RowIndex != 0 && (e.Row.RowIndex % 4 == 0 || e.Row.RowIndex % 5 == 0))
foreach (TableCell cell in e.Row.Cells)
/* --- 添加样式 --- */
cell.Attributes.Add("style", e.Row.RowIndex % 4 == 0 ? "padding-bottom:15px; border-bottom:solid 1px Gray" : "padding-top:15px");
参考技术A 用JS吧,如果你会jquery,会更容易.
用JS你可以先找到所有数据行,然后循环遍历,对满足条件的行的所有td设置border-bottom即可。 参考技术B 你取数据的时候构造的dataset每五行空一行不就好了?然后再绑定到Gridview上 参考技术C 修改第五行的样式,使第五行的下边框颜色为灰色,然后距离最下留15px的空白;修改第六行的样式,然后距离最上留15px的空白。这样看上去就像是每隔五行有一条空白数据作为分隔。
GridView 是 DataGrid的后继控件,在.net framework 2 中,虽然还存在DataGrid,但是GridView已经走上了历史的前台,取代DataGrid的趋势已是势不可挡。GridView和DataGrid功能相似,都是在web页面中显示数据源中的数据,将数据源中的一行数据,也就是一条记录,显示为在web页面上输出表格中的一行。
pyspark 获取一行中每一列的最新非空元素
【中文标题】pyspark 获取一行中每一列的最新非空元素【英文标题】:pyspark get latest non-null element of every column in one row 【发布时间】:2022-01-23 14:24:32 【问题描述】:让我用一个例子来解释我的问题: 我有一个数据框:
pd_1 = pd.DataFrame('day':[1,2,3,2,1,3],
'code': [10, 10, 20,20,30,30],
'A': [44, 55, 66,77,88,99],
'B':['a',None,'c',None,'d', None],
'C':[None,None,'12',None,None, None]
)
df_1 = sc.createDataFrame(pd_1)
df_1.show()
输出:
+---+----+---+----+----+
|day|code| A| B| C|
+---+----+---+----+----+
| 1| 10| 44| a|null|
| 2| 10| 55|null|null|
| 3| 20| 66| c| 12|
| 2| 20| 77|null|null|
| 1| 30| 88| d|null|
| 3| 30| 99|null|null|
+---+----+---+----+----+
我想要实现的是一个新的数据框,每一行对应一个code
,并且对于每一列,我想要拥有最新的非空值(最高的day
)。
在 pandas 中,我可以简单地做
pd_2 = pd_1.sort_values('day', ascending=True).groupby('code').last()
pd_2.reset_index()
得到
code day A B C
0 10 2 55 a None
1 20 3 66 c 12
2 30 3 99 d None
我的问题是,如何在 pyspark(最好是版本
到目前为止我尝试过的是:
from pyspark.sql import Window
import pyspark.sql.functions as F
w = Window.partitionBy('code').orderBy(F.desc('day')).rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)
## Update: after applying @Steven's idea to remove for loop:
df_1 = df_1 .select([F.collect_list(x).over(w).getItem(0).alias(x) for x in df_.columns])
##for x in df_1.columns:
## df_1 = df_1.withColumn(x, F.collect_list(x).over(w).getItem(0))
df_1 = df_1.distinct()
df_1.show()
输出
+---+----+---+---+----+
|day|code| A| B| C|
+---+----+---+---+----+
| 2| 10| 55| a|null|
| 3| 30| 99| d|null|
| 3| 20| 66| c| 12|
+---+----+---+---+----+
我不太满意,尤其是因为for loop
。
【问题讨论】:
这能回答你的问题吗? How to select the item that has the greatest value in dataframe ? In Pyspark @Steven 谢谢。但我认为它会有同样的循环遍历所有列的问题:| 如果您的问题只是 for 循环,请将其更改为 select 中的列表理解 改进代码是个好主意:) 问题是最后一行将包含来自不同行的元素(使用相同的代码),而不仅仅是选择一行。我认为它不能使用单个row_number
函数来完成。但如果我错过了什么,请告诉我或写一个答案:)
【参考方案1】:
这是另一种使用数组函数和结构排序而不是窗口的方法:
from pyspark.sql import functions as F
other_cols = ["day", "A", "B", "C"]
df_1 = df_1.groupBy("code").agg(
F.collect_list(F.struct(*other_cols)).alias("values")
).selectExpr(
"code",
*[f"array_max(filter(values, x-> x.c is not null))['c'] as c" for c in other_cols]
)
df_1.show()
#+----+---+---+---+----+
#|code|day| A| B| C|
#+----+---+---+---+----+
#| 10| 2| 55| a|null|
#| 30| 3| 99| d|null|
#| 20| 3| 66| c| 12|
#+----+---+---+---+----+
【讨论】:
【参考方案2】:我认为您当前的解决方案非常好。如果您想要其他解决方案,可以尝试使用first
/last
窗口函数:
from pyspark.sql import functions as F, Window
w = Window.partitionBy("code").orderBy(F.col("day").desc())
df2 = (
df.select(
"day",
"code",
F.row_number().over(w).alias("rwnb"),
*(
F.first(F.col(col), ignorenulls=True)
.over(w.rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing))
.alias(col)
for col in ("A", "B", "C")
),
)
.where("rwnb = 1")
.drop("rwnb")
)
结果:
df2.show()
+---+----+---+---+----+
|day|code| A| B| C|
+---+----+---+---+----+
| 2| 10| 55| a|null|
| 3| 30| 99| d|null|
| 3| 20| 66| c| 12|
+---+----+---+---+----+
【讨论】:
以上是关于怎样在.net的GridView中每五行空一行或者显示分割线?的主要内容,如果未能解决你的问题,请参考以下文章
asp.net中GridView怎样进行分页,编辑,删除操作
在 Gridview 中选择一行并将其删除 - Asp.net
DevExpress 中gridview怎么才能新建一行?其中的gridview1.AddNewRecord()方法没用