2011-06-14 3 views
2

xml 파일의 유효성을 검사하기 위해 xsd 파일을 사용하고 있습니다. xsd 파일에서 요소 중 일부만 필요하며 나머지는 선택 사항입니다. 그러나, 그것은 순차적이므로, 데이터 테이블에 나타나는 요소의 순서가 중요합니다. 사용자가 발생할 수있는 몇 가지 시나리오를 고려한 후에 문제 해결에 약간의 어려움이 생겼습니다.데이터 테이블의 열을 재정렬 하시겠습니까?

사례 : 예 : xsd 파일에 A, B, C, D, E, F의 6 가지 요소가 있습니다. A, C 및 D 만 필요합니다. 사용자는 A, C, D로 시작합니다. 사용자가 B라는 이름의 열을 추가 할 수 있습니다. 그러나 끝에 붙습니다 : A, C, D, B 따라서 순차적이므로, 그것은 유효하지 않습니다.

제 질문은, 어떻게하면 xsd 유효성 검사를 통과하기 위해 A와 C 사이에 B를 삽입합니까? 아니면 datagridview에있는 것들을 재정렬하고 그 데이터 테이블에 반영하는 다른 방법이 있습니까?

사용자가 테이블이 표시된 datagridview에서 열을 재정렬하도록 허용하여이 문제를 해결할 수 있다고 생각했습니다.

편집 : 나는 xsd 파일을 변경할 수 없다는 전제하에.

dataGridView1.AllowUserToOrderColumns = true; 

입니다

은, 그러나, 검증은 항상 마지막에 필요한 요소 후 "요소"가 예상 말해 줬어. 즉, datagridview에서 datacolumn의 이동이 datatable 자체에 반영되지 않았습니다. 검증을 통과하기 위해

, 나는 나는 그것이 다른 모든 것들을 기준으로 각각의 장소에 열을 삽입해야합니다 생각합니다. 또는 적어도 맨 끝에 삽입하고 사용자가 유효성 검사 단추를 누를 때 올바른 순서를 반영하십시오.

내가 좋아하는 것을 시도 말해 온라인 다른 것들을 건너했습니다

Table.Columns["Column Name"].SetOrdinal(NewIndex); 

을하지만 아직 구현하지 않았습니다. 위의 행이 작동하지 않는 경우 아이디어가 있습니까? =) 또한 DataGridView에서 사용자가 수행하는 작업과 데이터 테이블을 동기화 할 수 있기를 원합니다. 그것은 이상적 일 것입니다. 사용자가 datagridview에서 열을 이동하면 데이터 테이블에 변경 내용이 반영되어야합니다.

어떤 통찰력이 크게 감사합니다

, 나는 필요한 경우 추가 정보를 제공 할 수있을 것입니다. 감사! 감사합니다

, tf.rz

(.NET 3.5 SP1, 비주얼 스튜디오 C 번호 2008)

답변

1

이 아니라면이 아닌 사용자가 스키마 순서로 데이터를 입력해야하며 시스템이 자동으로 스키마를 기반으로 적절한 순서를 결정하도록해야합니까? 귀하의 가정이 귀하의 스키마 (들)가 비슷한 구성의 것으로 보인다, 그래서 스키마에서 주문을 결정하는 것은 어렵지 않아야합니다.

예를 들어 DataTable을 그대로두고 임의의 순서로 열을 입력 할 수 있습니다. 데이터를 xml로 출력해야하는 경우 스키마 파일을 검토하고 출력해야 할 요소의 순서를 식별하십시오. 요소 목록을 반복하고 DataTable에서 일치하는 열을 찾습니다.

스키마 파일을 처리하고 순서를 발견, 당신도 System.Xml.Schema.XmlSchema을 사용할 수 있습니다, 또는 스키마가 자체 XML을 그대로, 직접 XmlDocument, XPath 프롬프트에 대한 XDocument

+0

와우는 너무 심플하다. 슬프게도 나는 그런 생각을하지 못했습니다. 나는 그것에 착수하여 그러한 임무를 어떻게 수행 할 것인지를 확신 할 것이다. 너무 어려워서는 안됩니다. 도와 주셔서 감사합니다! 나는 그것이 어떻게 진행되는지 알려줄 것이다. ;) –

+0

클러치, 100 % 몇 가지 개조 및 테스트 후 작동. XPath는 신이다. 나는 주변에서 내 길을 찾았지만 당신은 확실히 나를 시작 시켰어. 고마워요! 50 명의 담당자를 즐기십시오! ;) –

+0

@ tf.rz 나는 너를 위해 잘되어있어서 다행이다! –

1

당신은 당신의 XSD를 부여하지 않은,하지만 난 당신을 추측하고있어

<xs:sequence>. 
를 사용하는

대신

<xs:all> 

예를 사용

<xs:element name="person"> 
    <xs:complexType> 
    <xs:all minOccurs="0"> 
    <xs:element name="firstname" type="xs:string"/> 
    <xs:element name="lastname" type="xs:string"/> 
    </xs:all> 
    </xs:complexType> 
</xs:element> 

예 위 "FIRSTNAME"및 "LASTNAME"요소가 임의의 순서로 나타날 수 있고, 각 요소는 0 또는 1 시간을 표시 할 수 있음을 나타낸다!

자세한 내용은 http://www.w3schools.com/schema/el_all.asp을 참조하십시오.

+0

감사를 사용하여 XML을 조회 할 수있는하려면 대답,하지만 난 xsd 파일을 변경할 수 없다고 가정합니다. 오해의 소지로 인해 유감스럽게 생각한다면 그것은 내 잘못이다. 나는 일관성을 위해서 특정 순서를 지켜야합니다. =) –

관련 문제