Лучший способ просмотреть таблицу с *партии* столбцов?

Я только что нашел решение, проверка имени пользователя / пароля не является частью процесса авторизации, это делается непосредственно в контроллере страницы входа, в примере 7 это делается в AccountController.

if (ModelState.IsValid)
{
    // validate username/password against in-memory store
    if (_users.ValidateCredentials(model.Username, model.Password))
    {
        ...
    }

Достаточно заменить этот фрагмент кода проверкой подлинности в реальном хранилище пользователей вместо значения по умолчанию TestUserStore.

12
задан ctacke 5 November 2008 в 23:08
поделиться

21 ответ

Хорошо, что оказалось правильным ответом для меня, должен был использовать управление ReportViewer, но не любым способом, зарегистрированным в MSDN. Проблема состоит в том, что у меня есть динамические данные, таким образом, я нуждаюсь в динамическом отчете и всех учебных руководствах, и т.д., кажется, предполагаю, что у Вас есть роскошь знания всего во время проектирования, таким образом, можно навести и кликнуть пути через Мастер.

Решение закончило тем, что требовало пары частей. Во-первых, я должен был создать код для динамичной генерации RDLC, что использование ReportViewer для описания расположения отчета и что поля данных отображают на какой. Это - то, что я придумал:

public static Stream BuildRDLCStream(
    DataSet data, string name, string reportXslPath)
{
  using (MemoryStream schemaStream = new MemoryStream())
  {
    // save the schema to a stream
    data.WriteXmlSchema(schemaStream);
    schemaStream.Seek(0, SeekOrigin.Begin);

    // load it into a Document and set the Name variable
    XmlDocument xmlDomSchema = new XmlDocument();
    xmlDomSchema.Load(schemaStream);        
    xmlDomSchema.DocumentElement.SetAttribute("Name", data.DataSetName);

    // load the report's XSL file (that's the magic)
    XslCompiledTransform xform = new XslCompiledTransform();
    xform.Load(reportXslPath);

    // do the transform
    MemoryStream rdlcStream = new MemoryStream();
    XmlWriter writer = XmlWriter.Create(rdlcStream);
    xform.Transform(xmlDomSchema, writer);
    writer.Close();
    rdlcStream.Seek(0, SeekOrigin.Begin);

    // send back the RDLC
    return rdlcStream;
  }
}

Вторая часть является файлом XSL, который я взял сразу же блога Dan Shipe. Код RDLC там был довольно бесполезен, как он был все предназначен для веб-использования, но XSL является чистым золотом. Я поместил его в нижней части этого сообщения для полноты в случае, если тот блог когда-либо идет офлайн.

После того как у меня есть те две части, это был просто вопрос создания Формы с управлением ReportViewer на нем, затем с помощью этого бита кода для установки его:

ds.DataSetName = name;

Stream rdlc = RdlcEngine.BuildRDLCStream(
    ds, name, "c:\\temp\\rdlc\\report.xsl");

reportView.LocalReport.LoadReportDefinition(rdlc);
reportView.LocalReport.DataSources.Clear();
reportView.LocalReport.DataSources.Add(
    new ReportDataSource(ds.DataSetName, ds.Tables[0]));
reportView.RefreshReport();

Ключ здесь - то, что 'ds' является объектом DataSet с единственным DataTable в нем с данными, которые будут отображены.

Снова, для полноты, вот XSL - извините о размере:

    <?xml version="1.0"?>
    <!-- Stylesheet for creating ReportViewer RDLC documents -->
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
      xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"  xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition"
      >

     <xsl:variable name="mvarName" select="/xs:schema/@Name"/>
     <xsl:variable name="mvarFontSize">8pt</xsl:variable>
     <xsl:variable name="mvarFontWeight">500</xsl:variable>
     <xsl:variable name="mvarFontWeightBold">700</xsl:variable>


     <xsl:template match="/">
      <xsl:apply-templates select="/xs:schema/xs:element/xs:complexType/xs:choice/xs:element/xs:complexType/xs:sequence">
      </xsl:apply-templates>
     </xsl:template>

     <xsl:template match="xs:sequence">
      <Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition">
       <BottomMargin>1in</BottomMargin>
       <RightMargin>1in</RightMargin>
       <LeftMargin>1in</LeftMargin>
       <TopMargin>1in</TopMargin>
       <InteractiveHeight>11in</InteractiveHeight>
       <InteractiveWidth>8.5in</InteractiveWidth>
       <Width>6.5in</Width>
       <Language>en-US</Language>
       <rd:DrawGrid>true</rd:DrawGrid>
       <rd:SnapToGrid>true</rd:SnapToGrid>
       <rd:ReportID>7358b654-3ca3-44a0-8677-efe0a55c7c45</rd:ReportID>

       <xsl:call-template name="BuildDataSource">
       </xsl:call-template>

       <xsl:call-template name="BuildDataSet">
       </xsl:call-template>

       <Body>
        <Height>0.50in</Height>
        <ReportItems>
         <Table Name="table1">
          <DataSetName><xsl:value-of select="$mvarName" /></DataSetName>
          <Top>0.5in</Top>
          <Height>0.50in</Height>
          <Header>
           <TableRows>
            <TableRow>
             <Height>0.25in</Height>
             <TableCells>

              <xsl:apply-templates select="xs:element" mode="HeaderTableCell">
              </xsl:apply-templates>

             </TableCells>
            </TableRow>
           </TableRows>
          </Header>
          <Details>
           <TableRows>
            <TableRow>
             <Height>0.25in</Height>
             <TableCells>

              <xsl:apply-templates select="xs:element" mode="DetailTableCell">
              </xsl:apply-templates>

             </TableCells>
            </TableRow>
           </TableRows>
          </Details>
          <TableColumns>

           <xsl:apply-templates select="xs:element" mode="TableColumn">
           </xsl:apply-templates>

          </TableColumns>
         </Table>
        </ReportItems>
       </Body>
      </Report>
     </xsl:template>

     <xsl:template name="BuildDataSource">
      <DataSources>
       <DataSource Name="DummyDataSource">
        <ConnectionProperties>
         <ConnectString/>
         <DataProvider>SQL</DataProvider>
        </ConnectionProperties>
        <rd:DataSourceID>84635ff8-d177-4a25-9aa5-5a921652c79c</rd:DataSourceID>
       </DataSource>
      </DataSources>
     </xsl:template>

     <xsl:template name="BuildDataSet">
      <DataSets>
       <DataSet Name="{$mvarName}">
        <Query>
         <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
         <CommandText/>
         <DataSourceName>DummyDataSource</DataSourceName>
        </Query>
        <Fields>

         <xsl:apply-templates select="xs:element" mode="Field">
         </xsl:apply-templates>

        </Fields>
       </DataSet>
      </DataSets>
     </xsl:template>

     <xsl:template match="xs:element" mode="Field">
      <xsl:variable name="varFieldName"> 
       <xsl:value-of select="@name" />
      </xsl:variable>

      <xsl:variable name="varDataType">
       <xsl:choose>
        <xsl:when test="@type='xs:int'">System.Int32</xsl:when>
        <xsl:when test="@type='xs:string'">System.String</xsl:when>
        <xsl:when test="@type='xs:dateTime'">System.DateTime</xsl:when>
        <xsl:when test="@type='xs:boolean'">System.Boolean</xsl:when>
       </xsl:choose>
      </xsl:variable>

      <Field Name="{$varFieldName}">
       <rd:TypeName><xsl:value-of select="$varDataType"/></rd:TypeName>
       <DataField><xsl:value-of select="$varFieldName"/></DataField>
      </Field>
     </xsl:template>

     <xsl:template match="xs:element" mode="HeaderTableCell">
      <xsl:variable name="varFieldName"> 
       <xsl:value-of select="@name" />
      </xsl:variable>

      <TableCell>
       <ReportItems>
        <Textbox Name="textbox{position()}">
         <rd:DefaultName>textbox<xsl:value-of select="position()"/>
         </rd:DefaultName>
         <Value><xsl:value-of select="$varFieldName"/></Value>
         <CanGrow>true</CanGrow>
         <ZIndex>7</ZIndex>
         <Style>
          <TextAlign>Center</TextAlign>
          <PaddingLeft>2pt</PaddingLeft>
          <PaddingBottom>2pt</PaddingBottom>
          <PaddingRight>2pt</PaddingRight>
          <PaddingTop>2pt</PaddingTop>
          <FontSize><xsl:value-of select="$mvarFontSize"/></FontSize> 
          <FontWeight><xsl:value-of select="$mvarFontWeightBold"/></FontWeight> 
          <BackgroundColor>#000000</BackgroundColor> 
          <Color>#ffffff</Color>
          <BorderColor>
           <Default>#ffffff</Default>
          </BorderColor>
          <BorderStyle>
           <Default>Solid</Default>
          </BorderStyle>
         </Style>
        </Textbox>
       </ReportItems>
      </TableCell>
     </xsl:template>

     <xsl:template match="xs:element" mode="DetailTableCell">
      <xsl:variable name="varFieldName"> 
       <xsl:value-of select="@name" />
      </xsl:variable>

      <TableCell>
       <ReportItems>
        <Textbox Name="{$varFieldName}">
         <rd:DefaultName><xsl:value-of select="$varFieldName"/></rd:DefaultName>
         <Value>=Fields!<xsl:value-of select="$varFieldName"/>.Value</Value>
         <CanGrow>true</CanGrow>
         <ZIndex>7</ZIndex>
         <Style>
          <TextAlign>Left</TextAlign>
          <PaddingLeft>2pt</PaddingLeft>
          <PaddingBottom>2pt</PaddingBottom>
          <PaddingRight>2pt</PaddingRight>
          <PaddingTop>2pt</PaddingTop>
          <FontSize><xsl:value-of select="$mvarFontSize"/></FontSize> 
          <FontWeight><xsl:value-of select="$mvarFontWeight"/></FontWeight> 
          <BackgroundColor>#e0e0e0</BackgroundColor> 
          <Color>#000000</Color> 
          <BorderColor>
           <Default>#ffffff</Default> 
          </BorderColor>
          <BorderStyle>
            <Default>Solid</Default>
          </BorderStyle>
         </Style>
        </Textbox>
       </ReportItems>
      </TableCell>
     </xsl:template>

     <xsl:template match="xs:element" mode="TableColumn">
      <TableColumn>
       <Width>0.75in</Width>
      </TableColumn>
     </xsl:template>

     <xsl:template name="replace-string">
      <xsl:param name="text"/>
      <xsl:param name="from"/>
      <xsl:param name="to"/>
      <xsl:choose>
       <xsl:when test="contains($text, $from)">
        <xsl:variable name="before" select="substring-before($text, $from)"/>
        <xsl:variable name="after" select="substring-after($text, $from)"/>
        <xsl:variable name="prefix" select="concat($before, $to)"/>
        <xsl:value-of select="$before"/>
        <xsl:value-of select="$to"/>
        <xsl:call-template name="replace-string">
         <xsl:with-param name="text" select="$after"/>
         <xsl:with-param name="from" select="$from"/>
         <xsl:with-param name="to" select="$to"/>
        </xsl:call-template>
       </xsl:when>
       <xsl:otherwise>
        <xsl:value-of select="$text"/>
       </xsl:otherwise>
      </xsl:choose>
     </xsl:template>
    </xsl:stylesheet>
12
ответ дан 2 December 2019 в 03:10
поделиться

Если Вы собираетесь реализовать свой собственный пользовательский элемент управления, Вы могли бы сделать Сетку Подозрительного взгляда как это:

Мертвая ссылка изображения

Этот пример показывает полноразмерное 3x4 панель, перемещающаяся в 9x10 таблица. С тех пор (я принимаю) Вы не должны редактировать эти данные, UI мог просто быть чем-то, где пользователь захватывает панель и перетаскивает ее вокруг. Если Вы являетесь действительно мазохистскими и/или имеете много свободного времени, у Вас может даже быть несколько панелей подозрительного взгляда на той же сетке, позволяя Вам сравнить один или несколько регионов сетки одновременно.

Обновление: Silverlight имеет один из них, по-видимому. Вид.

15
ответ дан 2 December 2019 в 03:10
поделиться

Имейте область с возможностью прокрутки и покажите 10 столбцов за один раз (они могут активно загружаться или кэшироваться или независимо от того, что Вам нужно). Когда Вы будете прокручены оставленные, покажите первые десять. Поскольку Вы прокручиваете право, покажите последнюю последовательность столбцов. Так, в целом, только 10 столбцов активны в любой данной точке. Попытка на самом деле отобразить 1 000 столбцов была бы гаек любой другой путь, по-моему. PS: Это - не что иное как идеальное предположение; я не действительно уверен, удаленно ли это возможно.

-1
ответ дан 2 December 2019 в 03:10
поделиться

Если все, в чем Вы нуждаетесь, должно удостовериться, что данные заполняются затем, почему бы не, каждый столбец со значением по умолчанию, скажем, 'освобождает', 'очищает' и т.д.

Затем можно выполнить итерации через при подсчете non-default/total для показа процента.

Теперь можно визуализировать полноту данных со значением процента, возможно, даже записать, какие столбцы имели значения по умолчанию (любите к списку/массиву) для дальнейшего расследования.

-1
ответ дан 2 December 2019 в 03:10
поделиться

Вы могли бы рассмотреть сверение с Вашей базой пользователей и наблюдение, что они действительно должны видеть, затем настроить представления для каждой отличной потребности, чтобы свалить количество столбцов.

Другая опция состояла бы в том, чтобы считать данные и создать огромный большой статический набор страниц HTML от них. Затем Вы могли вызвать браузер из своей программы для просмотра его.

-1
ответ дан 2 December 2019 в 03:10
поделиться

Сколько из данных очень важно для начального представления? Я вижу выполнение, что-то как ведущее устройство/деталь вводит сетку, куда Вы помещаете критические столбцы (скажите как 10) на datagrid и когда пользователь нажимает, чтобы посмотреть детали, можно взять остальные столбцы и отобразить их в "области свойств" или чем-то в том отношении.

-1
ответ дан 2 December 2019 в 03:10
поделиться

.. проверить, что данные на самом деле идут туда.

Может быть это, устарело, но Вы могли использовать пиксельную карту, где единственный пиксель представляет отдельную ячейку таблицы (экран, более затем 1000), или 10 ячеек для одного пикселя с регионом масштабирования по щелчку.

Цвет пикселя будет информационно-зависим. Это могло быть черно/бело для пустого / данных. Или это мог быть цвет, чтобы показать, что значение растет или уменьшение с каждой строкой. Или красный для внезапных переходов данных. Все аномалии Вы могли обычно ловить Вашим глазом в сетке данных.

Затем все, в чем Вы нуждаетесь, должно поймать координаты щелчка в сфере интересов и использовать маленькую таблицу, чтобы показать что часть таблицы без любой прокрутки.

Просто нажмите для возвращения к пиксельной карте.

0
ответ дан 2 December 2019 в 03:10
поделиться

Я рекомендовал бы исследовать что-то другое, чем плоское расположение. По моему опыту, базы данных имеют ограничения на количества столбцов и размеры байта строки.

  • Ваш SQL может позволить, чтобы 1 000 столбцов были определены.
  • Строка SQL не может превысить предел байта строки.

Каждая реализация базы данных имеет размер страницы (4k / 8k), и одна строка должна соответствовать в этом размере данных. ПУСТЫЕ УКАЗАТЕЛИ обычно являются бесплатными наборами. Это означает, что 1 000 ints 1000 x 4 байта будут просто соответствовать в 4k размере страницы.

Если Вы говорите данные с varchars, то проблема хуже. Сколько символов находится в каждом столбце? В скольких столбцы могут быть заполнены? Если у Вас есть 10 символов в среднем, и Ваш размер страницы является 8k, то Вы теряете данные с ошибкой SQL.

Смех, если Вы должны, но эта ситуация действительно происходила с особенно долго обветренной машинисткой в плоской таблице данных, которую я знал, раздвигал границы.

0
ответ дан 2 December 2019 в 03:10
поделиться

Приезжая в него от косого угла, я спросил бы, должны ли у пользователя быть все столбцы, "загруженные" когда-то?

Если пользователи были бы рады иметь подмножество столбцов, отображенных сразу (скажите, 100 за один раз, или наборы specfic за один раз), то я использовал бы некоторую сетку данных (созданный в одном, или ListView или возможно третье лицо одно) для отображения подмножества, с CheckedListView, прикрепленным со стороной, позволяя подмножеству интереса быть отображенным.

С другой стороны, Вы могли отобразить некоторые сводные данные, показывающие count/average/xxx для групп 100 столбцов?

0
ответ дан 2 December 2019 в 03:10
поделиться

Если Вы сразу после того, как проверка могла Вы не проверять каждое поле программно и сообщать, что вся строка в порядке!. Затем Вам нужно много простой сетки данных, которая перечисляет строки, которые не так хороши.

Они могут затем быть исследованы любой техникой, можно обратиться к одной строке, поскольку Вы не должны будете просматривать поля в большинстве случаев. Я предполагаю здесь, что Вы так или иначе уже можете просмотреть всю строку и после способа просмотреть несколько строк, одновременно ища недостающие данные (автоматизирующий это сделает это намного более надежным).

0
ответ дан 2 December 2019 в 03:10
поделиться

Я сделал бы это разверткой. На первой странице (или в верхней части страницы) у Вас были бы средства управления, которые выбирают строку. В следующей странице (или внизу страницы) Вы отобразили бы данные из выбранной строки. В зависимости от необходимой ширины ячеек Вы могли бы сделать это как 100 строк 10 столбцов или 1 000 строк 1 столбца, например.

Это было бы довольно легко сделать как динамический клиентский JavaScript - Вы могли даже сделать его доступным для редактирования этот путь. Я не уверен, как это работало бы в C#.

0
ответ дан 2 December 2019 в 03:10
поделиться

Кто считает таблицу на 1 000 столбцов??? Попытайтесь думать о способе отфильтровать или визуализировать данные.

0
ответ дан 2 December 2019 в 03:10
поделиться

Я чувствую себя грязным даже для предложения этого, но Вы могли сделать что-то вроде:

SELECT Field1 + ' - ' + Field2 + ... AS EvilMegaColumn FROM Table

но действительно я думаю, что это попадает в категорию, "при столкновении с этим ограничением Вы делаете что-то не так". Я действительно не вижу причины, скорости или иначе нуждаться в 1 000 столбцов...

0
ответ дан 2 December 2019 в 03:10
поделиться

необходимо ли просмотреть несколько строк на единственной таблице?

мое предположение - то, что эти данные являются числовыми, там какой-либо способ, которым Вы могли отобразить единственные данные строк как 20*50 сеток или что-то как этот, затем просто нумеровать страницы через строки?

Например, строка 1, столбец 1 = colum 1 базы данных, строка 2, столбец 1 = столбец 21 базы данных, и т.д.

Id = 1
     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
----|--------------------------------------------------------
  0 |  
 20 |  
 40 |
 60 |
 80 |
100 |
120 |
etc |
3
ответ дан 2 December 2019 в 03:10
поделиться

попробуйте таблицу HTML очень крошечным шрифтом

если Вы обеспокоены форматированием использования таблицы CSS:

td { font-size: 0.2em; text-align: right; }

поочередно, если все Ваши числа являются тем же размером, Вы могли бы также просто генерировать "стену чисел" дисплей, например, использовать шрифт фиксированной ширины и отображаемые столбцы 5 символов, широких в панели прокрутки

2
ответ дан 2 December 2019 в 03:10
поделиться

DataGrid (или даже ListView) должен смочь обработать таблицу с 32 столбцами и 32 строки, которые позволили бы Вам отображать всю ценность строки DB данных сразу. Это позволило бы Вам немедленно видеть, пропускали ли некоторые ячейки данные или нет.

1
ответ дан 2 December 2019 в 03:10
поделиться

Это зависит немного от того, насколько симпатичный это должно быть. Если это - просто инструмент отладки/выборочной проверки, Вы могли бы поместить несколько DataGrids рядом, каждый отображающий выбор столбцов. Было бы довольно ужасно, но будет осуществим.

OTOH при необходимости в полуполируемом инструменте Вы могли бы хотеть придумать пользовательский элемент управления для обработки его. В основном Вы загрузили бы раздел просматриваемой базы данных с небольшим количеством буфера, и когда пользователь прокрутил от в настоящее время загруженных данных, выполните новый запрос.

1
ответ дан 2 December 2019 в 03:10
поделиться

Что относительно того, чтобы хранить данные в файле CSV, который дал бы Вам опции для просмотра. Если у Вашего пользователя есть Excel, или Откройте Office Calc, они могли бы легко импортировать данные (не уверенный, если существует предел столбца на Calc, но Excel 2007 может содержать 16 384 столбца), и просмотрите его через ту программу?

6
ответ дан 2 December 2019 в 03:10
поделиться

Вы могли отформатировать все числа как n-символьные-строки с пробелами и затем отобразить их в шрифте фиксированной ширины.

1       2       3       4       6      36     436    6346
2       3       4       6      36     436    6346       0
3       4       6      36     436    6346       3       4
4       6      36     436    6346     333     222     334
14
ответ дан 2 December 2019 в 03:10
поделиться

Возможно, необходимо исследовать другой тип базы данных. Я услышал, что ориентированные на столбец базы данных хороши для этого вида вещи (тогда как типичный RDBMS ориентирован на строку). Кроме того, если Вы не будете возвращаться для обновления строк после того, как они будут сначала вставлены, возможно, двоичный плоский файл был бы лучше, чем гигантская таблица?

0
ответ дан 2 December 2019 в 03:10
поделиться

Учитывая, что пользователю все равно придется прокручивать по горизонтали, вы можете использовать обычную сетку данных, показывающую разумное количество столбцов (скажем, 50). Затем у вас есть горизонтальная полоса прокрутки, расположенная под сеткой, которая выбирает подмножество столбцов для отображения. Когда полоса прокрутки находится слева, вы показываете столбцы 1-50, когда вы щелкаете стрелку вправо, вы переходите к 2-51 и т. Д.

Это дает вам возможность прокрутки без необходимости перегружать элемент управления сеткой данными. Хотя вы потеряете возможность свободно перемещать курсор в таблице или делать большие прямоугольные выделения, похоже, что это не будет проблемой для этого приложения.

0
ответ дан 2 December 2019 в 03:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: