下面是我的GridView中的一个字符串列:
Convert.ToString(GridView1.Rows[t].Cells[2].Text)
我试着把它转换成双列:
Convert.ToDouble(GridView1.Rows[t].Cells[2].Text)
也尝试过这个
double x = double.Parse(GridView1.Rows[t].Cells[2].Text)
但总是抛出异常:“输入字符串格式不正确”
只有这样输入Convert.ToString(GridView1.Rows[t].Cells[2].Text)
代码才会运行
但是里面有数字值,需要以数字而不是字符串的形式获取值...
我在GridView中使用绑定字段和模板字段:
<asp:GridView ID="GridView1" runat="server" Width ="219px" Height="258px">
<Columns>
<asp:BoundField AccessibleHeaderText="k1" HeaderText="k1" />
<asp:BoundField AccessibleHeaderText="k2" HeaderText="k2" />
<asp:TemplateField AccessibleHeaderText="Rank1" HeaderText="Rank1">
<ItemTemplate>
<asp:Label ID="lblRank" runat="server" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
下面是排名按钮代码:
受保护的void Rank_Button_Click(对象发送方,事件参数e){
SortedDictionary<double, int> MyRank = new SortedDictionary<double, int>();
foreach (GridViewRow gRow in GridView1.Rows)
{
if (Convert.ToDouble(gRow.Cells[0].Text) != 0)
{
double score = Convert.ToDouble(gRow.Cells[0].Text);
while (MyRank.ContainsKey(score))
score += 0.00001;
MyRank.Add(score, gRow.RowIndex);
//MyRank.Add(Convert.ToDouble(gRow.Cells[0].Text), gRow.RowIndex);
gRow.Cells[0].ForeColor = System.Drawing.Color.DarkBlue;
}
}
for (int irS = 0; irS < GridView1.Rows.Count; irS++)
{
if (Convert.ToDouble(GridView1.Rows[irS].Cells[0].Text) > 0)
{
ir = ir + 1;
}
}
foreach (KeyValuePair<double, int> OneRank in MyRank)
{
GridViewRow gRow = GridView1.Rows[OneRank.Value];
Label lRank = (Label)gRow.FindControl("lblRank");
lRank.Text = (ir + 1).ToString();
ir--;
}
这成功地显示了模板字段中的排名,如您在示例中所示,但是:
当模板文件上传的排名编号为Gridview中的此列时:Convert.ToInt32(GridView1.Rows[t].Cells[2].Text)
,我想访问它:
for (int t = 0; t < GridView1.Rows.Count; t++)
{
if (Convert.ToInt32(GridView1.Rows[t].Cells[2].Text) < 5 )
{
labelX.Text = "message";
}
}
它抛出异常:输入格式不是正确的格式...
如果使用Convert.ToString(GridView1.Rows[t].Cells[2].Text)
,则不会引发异常,但可以使用t access the integeres(ranking numbers), if I try to convert it into
Convert.ToInt32(GridView1.Rows[t].Cells[2].Text)'
它抛出异常....
2条答案
按热度按时间webghufk1#
单元格中的字符串值可能不是int的有效表示形式,Parse方法将抛出FormatException。您能为我们提供您试图转换的值吗?
请尝试改用TryParse方法。
66bbxpm52#
所以,让我们主要备份卡车在这里。我们没有空白值的排名!!
我的意思是,马上,警钟应该在这里以一种巨大的方式响起!!
然后整个事情是崩溃在一个巨大的火球,因为你现在看到“”或空的排名。现在我们有一群人offing代码如何处理空白值时,我们从来没有空白!!!
谈论跑错路!!!
这里要解决的问题不是如何处理空白,而是发现为什么我们看到一个空白值!!!
也许我真的是在这里浪费时间。我在上一篇文章中明确地说:
现在,你为什么不阅读我的建议呢?
因此,尝试从Cells[]集合中提取/使用/获取/抓取等级值将永远不会起作用!
如果gv行的值在模板列中,那么我们不能使用单元格集合。
不过,无论如何,让我们不要使用gv来处理排名。简单地避免这个问题要好得多。
因此,让我们假设这个标记:
因此我们现在有了这个代码:
注意我们是如何对数据进行排名的,而不是对GV。
所以,我们现在看到这个:
因此,请注意,在数据表中添加“Rank”列要好得多。
然后我们对数据而不是GV运行排名代码。
现在,假设由于某种原因,我们想让前5是浅蓝色,然后任何大于5的都是深蓝色。
那么,我们就可以使用row数据绑定事件,我们可以做到这一点,而且再一次,我们甚至不必使用gv数据,但我们可以使用+ enjoy这里使用的数据行值。(因此,不需要混乱的类型转换!!!)
那么,说这个代码:
现在我们看到/得到这个:
所以这个故事真实的的寓意是什么?
正如我所说的,我们希望尝试和数据一起工作,而不是反对GV。
但是,为了便于学习,我们从GV中PULL等级值,在上面的示例中,等级值是一个模板列,而不是数据绑定列。
所以,记住这条规则:
因此,我们用于构造列的行数据绑定事件现在将变为:
那么,如果我们正在/将要/考虑/将要/接受从gv行获取值的想法呢?那么上面展示了我们是如何做到这一点的,因为正如所指出的,ANY AND ALL模板化列要求我们对每一行使用find控件,获取控件类型,然后从控件中拉取值-我们不能再对此类模板化列使用单元格集合。