Exemplo n.º 1
0
        /// <summary>
        /// 点击指定的行。
        /// <para>
        /// 若指定的索引是 -1,则:
        /// <list type="bullet">
        /// <item>
        /// 若设置了 <see cref="RowSelectedColor"/> 参数,将取消所有的选中背景。
        /// </item>
        /// <item>
        /// <see cref="BootDataGridRowSelectedEventArgs.Item"/> 的值是 null。
        /// </item>
        /// </list>
        /// </para>
        /// </summary>
        /// <param name="index">点击行的索引。</param>
        /// <exception cref="InvalidOperationException">索引超出数组范围。</exception>
        public async Task ClickRow(int index)
        {
            if (index > Data.Count)
            {
                throw new ArgumentOutOfRangeException($"指定的索引({index})超出数组范围({Data.Count})");
            }

            await OnRowSelected.InvokeAsync(new BootDataGridRowSelectedEventArgs(index, index < 0 ? null : Data[index]));

            if (RowSelectedColor.HasValue)
            {
                var bgColorCss   = ComponentUtil.GetColorCssClass(RowSelectedColor.Value, "bg-");
                var textColorCss = ComponentUtil.GetReverseColorCssClass(RowSelectedColor.Value, "text-");

                //先清空相应的 css
                if (index < 0)
                {
                    for (int i = 0; i < RowCssList.Count; i++)
                    {
                        RemoveRowCss(i, bgColorCss);
                        RemoveRowCss(i, textColorCss);
                    }
                    return;
                }

                if (!RowMultipleSelect)
                {
                    //如果不能多选行,则点击任意一行则会取消其他行的高亮。
                    for (int i = 0; i < RowCssList.Count; i++)
                    {
                        RemoveRowCss(i, bgColorCss);
                        RemoveRowCss(i, textColorCss);
                    }
                }

                if (index > -1)
                {
                    if (HasRowCss(index, bgColorCss))
                    {
                        RemoveRowCss(index, bgColorCss);
                        RemoveRowCss(index, textColorCss);
                    }
                    else
                    {
                        AddRowCss(index, bgColorCss);
                        AddRowCss(index, textColorCss);
                    }
                }
            }
        }