【问题标题】:if (GridView1.Rows[i].Cells[3].Text.Equals("credit")) not working correctlyif (GridView1.Rows[i].Cells[3].Text.Equals("credit")) 无法正常工作
【发布时间】:2015-03-01 16:42:43
【问题描述】:

我在里面有网格视图我在贷方和借方列中有借方/贷方列和金额列如果 v_flag = d 然后返回借方否则返回贷方 html 我写了这个:

<asp:TemplateField HeaderText="debit/credit">
            <ItemTemplate>
                 <asp:Label ID="debit" runat="server" Text='<%# (Eval("v_flag").ToString() =="d" ) ? "debit": "credit" %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>

        <asp:BoundField  DataField="v_amount" 
                                HeaderText="المبلغ" ItemStyle-Font-Size="Small"/>

它工作正常,但是当我试图只在文本框中的 gridview 之外获得贷方的总额,而在文本框中的 gridview 之外的借方总额 使用此代码:

   for (int i = 0; i < GridView1.Rows.Count; ++i)
            {
                if (GridView1.Rows[i].Cells[3].Text.Equals("credit"))
                {
                    sumCredit += Convert.ToDouble(GridView1.Rows[i].Cells[4].Text);
                    TxtCredit.Text = sumCredit.ToString();
                }
                else
                {
                    sumDebit += Convert.ToDouble(GridView1.Rows[i].Cells[4].Text);
                    TxtDebit.Text = sumDebit.ToString();
                }
            }

如果 (GridView1.Rows[i].Cells[3].Text.Equals("credit")) 不起作用它总是直接转到 else 语句

【问题讨论】:

  • 您确定Cells[3].Text 是您期望的单元格吗?您是否在调试器中查看过它的值?
  • 是的,我确定它在 cells[3].text 中,但在调试器中该值为 null
  • 在我看来,您需要获取标签文本而不是单元格? “借记”标签是否包含您要查找的贷记或借记文本?
  • 它包含借方和贷方放我要贷方总和借方总额
  • @feby 如果任何答案对您有用,您应该接受答案。

标签: c# asp.net gridview


【解决方案1】:

GridView1.Rows[i].Cells[3].Text.Equals("credit") 就像调用单元格javascript函数的innerText一样。

所以改变

GridView1.Rows[i].Cells[3].Text.Equals("credit")

通过

var tempLabel= GridView1.Rows[i].FindControl("debit") as Label;
    if(tempLabel.Text.Equals("credit"))

【讨论】:

  • 返回错误无法将类型表格单元格转换为文本框
  • 检查我的更新。我犯了一个错误。您必须将其转换为标签
  • 不,现在它返回一个错误,无法将类型表格单元格转换为标签
  • 我现在更新答案,我在一个项目中测试它现在可以工作了;)
【解决方案2】:

试试这个

for (int i = 0; i < GridView1.Rows.Count; ++i)
        {
      Label lblcredit = GridView1.Rows[i].FindControl("credit") as Label;
            if (lblcredit.Text == "credit")
            {
                sumCredit += Convert.ToDouble(GridView1.Rows[i].Cells[4].Text);
                TxtCredit.Text = sumCredit.ToString();
            }
            else
            {
                sumDebit += Convert.ToDouble(GridView1.Rows[i].Cells[4].Text);
                TxtDebit.Text = sumDebit.ToString();
            }
        }

希望对您有所帮助。

【讨论】:

  • 返回错误can't implicitly convert type label to bool
  • @feby 我修改了我的答案,请立即查看
【解决方案3】:

使用FindControl 进入 if-else

var debitTB = GridView1.Rows[i].FindControl("debit") as Label;
if (debitTB.Text.Equals("credit"))

foreach 也会让你的代码更干净。

foreach(var row in GridView1.Rows){
    var debitTB = row.FindControl("debit") as Label;

【讨论】:

  • 你能解释一下为什么你声明 debitTB 然后在 if 语句中你使用它而不是写 if (GridView1.Text.Equals("credit"))
  • 为了可读性。你也可以写if (((Label)GridView1.Rows[i].FindControl("debit")).Text.Equals("credit")),但它不会很可读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2016-02-25
  • 2019-07-23
  • 2015-09-27
  • 2016-04-14
  • 1970-01-01
相关资源
最近更新 更多