DataGrid问题 - 值总是显示0?

时间:2011-01-14 12:11:07

标签: c# silverlight datagrid silverlight-4.0 foreach

我知道有几个功能正常工作。一个只使用正则表达式计算文本框中的单词数,另一个使用正则表达式来计算同一文本框中特定单词(字符串)的实例。我确保这些都返回了预期的值。

但是,我显然搞砸了函数以某种方式填充我的数据网格,因为keywordcount总是返回零,密度也是如此。

这是我的代码:

public List<KeywordDensity> LoadCollectionData()
{
   string thearticle = txtArticle.Text;
   string[] keywordsarray = txtKeywords.Text.Split('\n');

   bool isincluded = false;
   int keywordcount = 0;
   int thedensity = 0;

   List<KeywordDensity> lsikeywords = new List<KeywordDensity>();
   foreach (string s in keywordsarray)
   {
      if (s.Trim() != "")
      {
         keywordcount = KeywordCount(thearticle, s);
         thedensity = keywordcount / WordCount(thearticle);

         if (thearticle.Contains(s))
         {
            isincluded = true;
         }
         else
         {
            isincluded = false;
         }

         lsikeywords.Add(new KeywordDensity()
         {
            included = isincluded,    
            keyword = s,
            occurences = keywordcount.ToString(),
            density = thedensity.ToString()
         });
      }
   }
   return lsikeywords;
}

EDIT @ 8:30 AM MST :找出部分问题。使用“\ n”作为拆分字符无效。显然,它只是将整个事物“分裂”成一个大块,包括回车和提交。我将其更改为“\ r \ n”,现在至少“包含”和“Occurences”部分工作正常。

现在唯一的问题是“密度”无法正常工作。我意识到它不能被声明为int;但它仍然总是返回0 - 即使我将密度声明为浮点数或变量。

以下是否有问题?

thedensity = keywordcount / wordcount;

另外 - .ToString()函数是否会截断小数点加上过去的所有内容?例如,如果变量的值为0.43,它只会转换为0?如果不是这种情况,我应该使用哪种变量类型?我认为漂浮是合适的。

再次感谢!

编辑@ 8:45 MST :太糟糕了我不能接受多个答案。 '\ r'和var类型都是问题。我没有意识到你不能通过划分两个整数来计算浮点数。当我将源变量更改为浮点数并将密度变为var时,它也起作用。

谢谢!

-Sootah

4 个答案:

答案 0 :(得分:1)

你用整数计算。 WordCount听起来像一个大数字,关键字不是。也许这就是为什么你没有期望的结果呢?

另一个问题,如果WordCount返回零怎么办?这将抛出异常。这是否永远不会发生(假设不是,但是吗?)?如果在绑定中抛出异常,应用程序将不会挂起但结果将为false。

答案 1 :(得分:1)

我会在这里改变一些事情。首先是重新分配关键字以确保没有附加空格:

foreach (string s in keywordsarray)
{
   string key_word = s.Trim();
   if (key_word != "")
   {
      // Replace all uses of s with key_word
      if(thearticle.Contains(key_word))
      // ...

其次是直接分配isincluded

isincluded = thearticle.Contains(key_word);

然后我会确保txtKeywords实际上是由换行符分隔的列表:

// Is this really strings separated by newlines?
string[] keywordsarray = txtKeywords.Text.Split('\n');

答案 2 :(得分:1)

是的,SwDevMan81有一个好处 - 确保keywordsarray []实际上有一些单词。

我很确定如果用户键入Silverlight文本框,则分隔符为'\ r'(至少我知道我看到它的行为方式)。

使用正则表达式进行拆分可能会更好。

答案 3 :(得分:0)

关键在于你在哪里填写这些数据?对LoadCollectionData的调用应该在您的代码的构造函数中,因为您使用的是List,否则请使用ObservableCollection。另外,发布Grid的XAML也会有所帮助。