Имеется табличка:
Её верстка:
<dx:ASPxGridView Width="100%" ID="gvMeasurement" runat="server" AutoGenerateColumns="False"
ClientInstanceName="gvMeasurement" KeyFieldName="id_measurement" DataSourceID="ODS_Measurements"
OnCustomErrorText="CustomErrorText" OnBeforePerformDataSelect="grid_DataSelect">
<Columns>
<dx:GridViewCommandColumn Name="CommandButtons" ButtonType="Image" VisibleIndex="0"
ShowClearFilterButton="true">
<CustomButtons>
<dx:GridViewCommandColumnCustomButton ID="btnInsertMI" Text="Добавить СИ в Блок"
Image-AlternateText="Добавить СИ к Блоку" Image-SpriteProperties-CssClass="spr_folder_add12" />
<dx:GridViewCommandColumnCustomButton ID="btnDeleteMI" Text="Удалить СИ из Блока"
Image-AlternateText="Добавить СИ к Блоку" Image-SpriteProperties-CssClass="spr_folder_add12" />
</CustomButtons>
<HeaderTemplate>
<input class="spr_garbage" type="image" src="/../Images/blank.gif" onclick="return GetGarbage(1);"
title="Показать списанные" />
<input class="spr_tbl2_refresh16" type="image" src="/../Images/blank.gif" onclick="return GetGarbage(0);"
title="Обновить данные" />
<input class="spr_expand16" type="image" src="/../Images/blank.gif" onclick="gvMeasurement.ExpandAll(); return false;"
title="Раскрыть все" />
<input class="spr_collapse16" type="image" src="/../Images/blank.gif" onclick="gvMeasurement.CollapseAll(); return false;"
title="Свернуть все" />
</HeaderTemplate>
<HeaderStyle Wrap="False" />
</dx:GridViewCommandColumn>
<dx:GridViewDataTextColumn FieldName="measure_name" Caption="Наименование СИ" VisibleIndex="2">
<Settings AllowGroup="False" AllowHeaderFilter="False" />
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="corp_type" Caption="Тип СИ" VisibleIndex="3">
<Settings AllowGroup="False" AllowHeaderFilter="False" />
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="reestr_code" Caption="Номер в Госреестре" VisibleIndex="4">
<Settings AllowGroup="False" AllowHeaderFilter="False" />
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="manufacturer" Caption="Производитель" VisibleIndex="5">
<Settings AllowGroup="False" AllowHeaderFilter="False" />
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="" Caption="Год введения в экспл" VisibleIndex="6">
<Settings AllowGroup="False" AllowHeaderFilter="False" />
</dx:GridViewDataTextColumn>
<%--<dx:GridViewDataColumn FieldName="exp_flags" Caption="Контроль<br/>сроков" VisibleIndex="11">
<CellStyle HorizontalAlign="Center" />
<DataItemTemplate>
<asp:Image ID="changeImage" runat="server" ImageUrl="~/Images/blank.gif" GenerateEmptyAlternateText="True" />
</DataItemTemplate>
<Settings AllowGroup="False" ShowFilterRowMenu="False" AllowAutoFilter="True" />
</dx:GridViewDataColumn>--%>
</Columns>
<TotalSummary>
<dx:ASPxSummaryItem DisplayFormat="Итого: {0:n0}" ShowInColumn="measure_name" FieldName="id_measurement"
SummaryType="Count" />
</TotalSummary>
<GroupSummary>
<dx:ASPxSummaryItem DisplayFormat="Кол-во: {0:n0}" FieldName="summary" SummaryType="Count" />
</GroupSummary>
Есть процедура, вытягивающая данные из базы:
CREATE OR REPLACE FUNCTION metrolog.pmsystems_get_list_ms_by_msys_block(p_user_name character varying, p_msys_id integer, p_msys_block_id integer)
RETURNS refcursor
LANGUAGE plpgsql
STABLE
AS $function$
-- Получение списка СИ по подразделению (Укороченная версия)
-- comm: также возвращает СИ по всем дочерним, не привязанные к Корп реестру также возвращаются
DECLARE
p_info constant refcursor := 'p_info';
c_id_ended constant integer := 10; -- Для обозначения состояния СИ - СПИСАНО
BEGIN
OPEN p_info FOR
SELECT mm.id_measurement,
rc.corp_name measure_name,
rc.corp_type,
rs.reestr_code,
ro.org_name manufacturer,
null, -- год введения в эксплуатацию
count(1) over (partition by rc.corp_name, rc.corp_type, rs.reestr_code) summary
FROM MEASUREMENT MM
join skynet.link_ms_blocks_measurement lbs on (mm.id_measurement = lbs.id_measurement)
left join reestr_org ro on (mm.id_org = ro.id_org)
left join reestr_company rc on (mm.id_reestr_corp = rc.id_reestr_corp)
left join REESTR_STATE RS on (rs.id_state = rc.id_state)
WHERE mm.status = true
AND COALESCE(mm.id_statusoper, -1) <> c_id_ended
and lbs.msys_id = p_msys_id
and lbs.msys_block_id = p_msys_block_id
ORDER BY measure_name DESC;
RETURN p_info;
EXCEPTION
WHEN others THEN
perform error_handler(p_user_name,'pmsystems','pmsystems_get_list_ms_by_msys_block',sqlstate, sqlerrm);
END;
$function$
Процедура рабочая, проверено. Как видно, на входе два id.
Вопрос в том, как в C# корректно написать, чтобы процедура сработала и на экране отобразились заветные данные?
Пробовал вот так:
protected void ODS_Measurements_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
NpgsqlParameter[] pgsqlParams = new NpgsqlParameter[] { new NpgsqlParameter("msys_id", NpgsqlDbType.Integer),
new NpgsqlParameter("msys_block_id", NpgsqlDbType.Integer)
};
pgsqlParams[0].Value = Session["ssPIDMSYS"];
pgsqlParams[1].Value = Session["ssPIDBlock"];
e.InputParameters["pgsqlParams"] = pgsqlParams;
e.InputParameters["pgsqlProc"] = Resources.PgSQLResources.GetListMSbyMSYSBlock;
}
protected void grid_DataSelect(object sender, EventArgs e)
{
Session["ssPIDMSYS"] = (sender as ASPxGridView).GetMasterRowKeyValue();
}
В Value записываются null, почему? Не могу найти ответ.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть звонилка, внизу у нее постоянно реклама висит, что раздражаетВозникла идея не блочить сервер рекламы, а просто обрезать снизу, либо серый...